UCOSII串口中断和led任务,只能执行一个,是什么原因?

2019-08-14 01:41发布

在ucosii任务调度模板中,加入了自己的IMU读取的代码,结果一直只能执行一个程序。用了系统延时函数,临界区都没有效果。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
章鱼哥丶
1楼-- · 2019-08-14 04:44
为什么要在led0_task中加入临界段代码保护呢?这样的任务就没办法调度了啊
章鱼哥丶
2楼-- · 2019-08-14 10:03
当采用了关中断的方式进行临界段代码保护的时候,就不会进入中断服务函数
idfulin
3楼-- · 2019-08-14 15:11
 精彩回答 2  元偷偷看……
wjlshuaiqi
4楼-- · 2019-08-14 18:46
章鱼哥丶 发表于 2017-9-8 17:12
当采用了关中断的方式进行临界段代码保护的时候,就不会进入中断服务函数

刚接触UCOSII,这个问题困扰了很久,请问下如何去写呢?我这个程序是一个串口读取IMU数据,一个是LED闪烁。
wjlshuaiqi
5楼-- · 2019-08-14 20:54
idfulin 发表于 2017-9-8 17:22
你的LED任务的写法完全不是基于操作系统的写法啊,你的delay_ms函数完全可以换成系统提供的OSTimeDly;还有 ...

我用过OSTimeDly效果还是只能执行其中一个程序,请问释放CPU的这个代码是如何写呢?
章鱼哥丶
6楼-- · 2019-08-15 02:20
wjlshuaiqi 发表于 2017-9-10 10:13
刚接触UCOSII,这个问题困扰了很久,请问下如何去写呢?我这个程序是一个串口读取IMU数据,一个是LED闪烁 ...

在LED闪烁的任务中不用使用临街段代码保护,就和裸机的写法一样,不过要使用UCOS的延时函数。还用你确定的你的LED任务的堆栈,建立了吗?同时建议你在串口中断中不要有过多的操作,可以通过信号量,或者消息队列的方式让任务去判断数据。

一周热门 更多>