FreeRTOS新手求解答

2019-07-20 03:25发布

      LED1的优先级高于LED0的优先级,(已经删除浮点任务)
      当第一次vTaskDelay(200),阻塞当前任务,进入LED0任务,进入vTaskDelay(500),等vTaskDelay(200)过后,高任务优先级LED1开始执行,保留现场所以从       延迟之后开始跑,
      但是到vTaskDelay(800)时候,又会进入LED0,此时计时的话,是保留上次计时的数吗?即是从300开始计时吗?
      当计时开始的时候CPU在做什么?因为此时LED1还是在阻塞太,CPU会延迟300后,轮询执行LED0任务吗?(在LED1任务回复就绪状态前)。


    如果我的任务不用任何的延迟,即不用vTaskDelay()函数,怎么去实现多任务?比如I2C读取EEPROM,和读写内部Flash,


   如果CPU在执行当前最高优先级任务,其他任务发生中断怎么处理?(外部按键中断等)


谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
46条回答
edmund1234
2019-07-20 06:58
烈日灼心 发表于 2019-3-7 15:14
是的,比如有2个任务 A和B,A的优先级大于B的优先级,CPU首先执行的是A任务,但是当跑
vTaskDelay(200 ...

会啊, 我之前贴的你没看到在200ms时在执行那个任务么?我都特意让你留意看最右边的时间

led1_task     LED1(0);                          0s
led1_task     vTaskDelay(200);            0.x us
led0_task     LED0Toggle;                   0.x us
led0_task     vTaskDelay(500);            0.x us  
Idle
led1_task     LED1(1);                          200ms
led1_task     vTaskDelay(800);            200ms+0.x us
Idle
led0_task     LED0Toggle;                   500ms

一周热门 更多>