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
1楼-- · 2019-07-21 02:23
烈日灼心 发表于 2019-3-6 16:10
谢谢回答,那LED1延迟这个800MS,LED0跑完一次就去跑IDLE任务?那什么时候推出IDLE?
是计时超过800ms吗 ...

是, 800ms的阻塞就会跳回LED1任务
ZHDX
2楼-- · 2019-07-21 03:15
每个任务的vTaskDelay是根据任务自己的时间的.  和其他任务的时间没关系.

不过系统会调度, 让优先级别高的先执行,  推迟优先级别低的执行而已.  优先级别低的vTaskDelay的实际等待时间会被其他任务占用和拉长

烈日灼心
3楼-- · 2019-07-21 08:37
 精彩回答 2  元偷偷看……
烈日灼心
4楼-- · 2019-07-21 09:39
ZHDX 发表于 2019-3-6 16:26
每个任务的vTaskDelay是根据任务自己的时间的.  和其他任务的时间没关系.

不过系统会调度, 让优先级别 ...

我不是很明白,,,
edmund1234
5楼-- · 2019-07-21 14:59
烈日灼心 发表于 2019-3-6 16:28
实验的结果是LED0每隔500ms反正一次,但是从代码角度看,第一次200ms就会翻转,到了200ms就会退出去执行l ...

要不是你的回复写错, 要不就是你理解代码有误
烈日灼心
6楼-- · 2019-07-21 16:34
 精彩回答 2  元偷偷看……

一周热门 更多>