我是用这个程序改的串口接收程序:https://www.rt-thread.org/document/api/uart_sample_8c-example.html加入判断语句可以实现相应的操作,但始终是同一线程内的,没有体现rt thread多线程的的用处。
想使用信号量、互斥量实现线程间通信,调试发送标志也是OK的,但是线程始终卡死在串口接收。
起初认为是一直take没有release造成了堵塞的原因,换成邮箱后同样是不能切换到其他线程。想问一下是什么原因呢?新手上路,还望不吝赐教。
查看更多
把串口接收部分代码改成下面的样子。
/* 阻塞等待接收信号量,等到信号量后再次读取数据 */ rt_sem_take(&rx_sem, RT_WAITING_FOREVER); /* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */ if (rt_device_read(serial, -1, &ch, 1) != 1) { continue; }
/* 阻塞等待接收信号量,等到信号量后再次读取数据 */
rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
/* 从串口读取一个字节的数据,没有读取到则等待接收信号量 */
if (rt_device_read(serial, -1, &ch, 1) != 1)
{
continue;
}
然后,你现在的代码怎么写的,不成功跟你的代码有很大的关系,没代码,大家也没办法猜什么原因。
谢邀。。刚刚看到被要请了,问题已经解决 很好?
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
现在代码就是这样,我实际操作就是输入0,蓝灯亮,输入1,蓝灯灭。但是无法进入线程1。即红灯没有现象。想问一下我的逻辑哪里出了问题?
@TELK_4455 线程 1 都没初始化,没运行,咋能运行?
@出出啊 原来在这里,对不起看得不够仔细😭,吸取教训了,谢谢你。所以串口接收的写法其实没关系对吗?
@TELK_4455 那俩函数的顺序还是注意点儿比较好,曾经有人说例子上的用法会丢数,调整俩函数的顺序后就不丢数了。虽然没找到合理的解释,但是,既然用了信号量进行同步,先同步,再可靠的去读数据,这样逻辑清晰。