


从结果看,程序运行后先进入了高优先级的TASKLED2,再进入TASKLED1,很奇怪为什么不会再一次进入TASKLED1呢?若是修改TASKLED2 的睡眠时间为Task_sleep(1000);则能再一次进入TASKLED1,如下:

问题:请问这是什么原因导致的呢?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.



从结果看,程序运行后先进入了高优先级的TASKLED2,再进入TASKLED1,很奇怪为什么不会再一次进入TASKLED1呢?若是修改TASKLED2 的睡眠时间为Task_sleep(1000);则能再一次进入TASKLED1,如下:

问题:请问这是什么原因导致的呢?
根据您贴出的代码来看,有可能是Task_sleep(1)时间太短了,一直被task2抢占,从打印信息看task2的计数值总为4,看上去像semaphore没有被post,程序运行的时候观察一下灯闪烁的情况。
确实是semaphore没有被post,那么Task优先级会抢占Delay的运行吗?为什么当Delay(1)时能正常触发Task1,但无法再一次触发呢?
Task优先级会抢占Delay的运行吗?
task sleep意味着当前任务被block,去执行低优先级任务,但当task2休眠时间到了,高优先级的task2就会继续执行当前任务,不管task1是否执行结束。
为什么当Delay(1)时能正常触发Task1,但无法再一次触发呢?
可能需要借助工具来分析看看了。