FREERTOS中的任务必须要加一个延时么?
在STM32上用时,不加延时会怎么样呢
这些RTOS系统,本身大多是在单片机上运行的,而单片机上又只有一个内核,程序全是顺序执行的
这里的延时,只不过是把当前的任务的放弃CPU点用,让CPU云运行其他的程序,如果没有这个自所谓的延时,那么只有一个任务占用CPU,其他的任务没有办法得到CPU的权限,这与裸机的开发不就一样了么,而且还是最高优先级的这个任务。那么使用RTOS的意义就没有了
您指的是VTaskDelay函数吧?这个函数不是简单的延时,更重要的是进行任务调度。
我们使用操作系统的主要目的就是允许多任务"同时"运行。
每个任务总会有等待某个状态的时候。在等待的过程中调用vTaskDelay可以让其它任务取得运行的机会。
延时不是必须的,加延时的原因是:
单片机都是单核心的,同一时间智能运行一个任务。freeRTOS 看起来可以多任务轮流执行,是因为1秒内,任务1执行了 0.1秒就完成了,任务2执行了0.1秒也完成了。所以1秒之内多个任务只用了 0.x 秒,没有把这 1 秒运行时间占满。
如果你有一个任务没有 delay,那么这一个任务不停的执行,1秒内,这个任务就占用了1秒,其他任务还要占用cpu 时间,cpu 占用率就会高于 100%,系统运行不过来。可以认为 cpu 被累死了,因为只有 1 秒时间,你给他了 1.1 秒的任务,他执行不过来。
不加延时是可以的,但是不加延时,系统会崩溃,因为 cpu 被占用的太高了,
不加延时,cpu 会被一个任务独占,其他任务没有机会运行,整个系统就乱了