frertos是可剥夺内核
1. 任务
与线程类似
任务函数
void ARaskFunction(void *);
无返回值,功能在死循环中运行。
顶层任务状态
任务有两种状态,运行态,非运行态。只有调度器能进行切换。
任务优先级
调度器保证选择最好优先级的任务,并使其进入运行态。
心跳中断的周期性中断用于调度器在每一个任务结束时运行调度程序。
如果一个高优先级一个低优先级,在心跳中断下,总是执行高优先级的任务,低优先级的任务被饿死
非运行态
- 阻塞态:一个任务在等待某个事件,事件驱动任务。
- 挂起态:对调度器不可见,使用挂起vTaskSuspend()唤醒vTaskResume()
- 就绪态:未阻塞未挂起态
空闲任务
空闲任务是保证至少有一个任务处于运行态,拥有最低的优先级保证随时切出,不浪费资源。
钩子函数
通过(回调,hook)钩子,可以直接在空闲任务中添加应用程序相关功能
作用:1. 执行后台或需要不停处理的代码
2. 测试处理器处理裕量,了解系统有多少富裕的处理时间
3. 将处理器配置到低功耗模式
限制:不能阻塞挂起,任务被删除后,空闲任务