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条回答
烈日灼心
1楼-- · 2019-07-23 10:57
edmund1234 发表于 2019-3-6 18:07
你有N个任务, 就当有N个CPU,每一任务都单独分配一CPU。
所以不存在你想的, 在led0 Delay了500ms, 然 ...

可能和我你的想法有出入,我的想法是,LED0的500ms并没有计时到500,因为高优先级的任务经过200ms后成了就绪态。所以。当LED0进行一半,就会执行LED1了,感谢您的回答,我明天在做验证!
ZHDX
2楼-- · 2019-07-23 11:59
我举个简单例子吧.

你是一个大管家(CPU)

你的一个客户A, 要求你每天到他办公室处理一下.

你的一个客户B, 也是这样要求的.

你平时很空闲, 客户A和客户B都很满意, 觉得你很准时.



突然有一天, 你的客户B, 要你到美国走一转, 这么一转, 就要3天时间了.

那么你还能执行客户A的动作吗??

烈日灼心
3楼-- · 2019-07-23 13:25
 精彩回答 2  元偷偷看……
ZHDX
4楼-- · 2019-07-23 16:58
烈日灼心 发表于 2019-3-6 23:13
我懂你的意思,你的意思是任务需要执行的时间,他们的任务很小,几乎可以忽略这个时间。但是这个不是我的 ...

那就没什么问题了.

你的任务不延迟, 那有什么重要事情一直干下去呢??

那个优先级高的任务如果一直干下去, 是真的会把其他任务卡死的.

但实际的编程工作里, 没这种事情, 就算不断重复一件事情, 中间肯定有空闲的时候要delay一下的.

另外中断是中断,  中断和其他低等级任务无关.    中断的优先级是比任务要大.

烈日灼心
5楼-- · 2019-07-23 21:05
 精彩回答 2  元偷偷看……
烈日灼心
6楼-- · 2019-07-23 23:55
 精彩回答 2  元偷偷看……

一周热门 更多>