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在执行当前最高优先级任务,其他任务发生中断怎么处理?(外部按键中断等)
谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
或者玩玩一些快餐店游戏.
举个很简单的例子,
你自己是厨师(CPU),
一个烧水的流程是10分钟,
你按烧水, 就相当于烧水的任务代码是 ShaoShui(); vTaskDelay(10分钟);
一旦启动了热水壶, 你自己是CPU, 10分钟之内是不用管这个水壶的.
如果你的所有任务都很轻松, 那么你能准确在10分钟后立刻使用这壶水.
但如果刚巧你有一些很重要的步骤正在做不好打断, 那么你就会选择晚一点管这壶烧好的水.
在这壶烧好的水的角度上, 它就被任务调度影响到了, 自己的vTaskDelay被拖延了. 它不理解你CPU干嘛去了.
这些其实毫无难度, 只要花多一点时间去模拟场景, 去活得类似的经验.
经验不够, 那么理解力就不会够.
一周热门 更多>