taskYIELD
task. h
taskYIELD() 用于请求切换上下文到另一个任务。
但是, 除非存在其他任务,其优先级等于或高于调用 taskYIELD() 的任务的优先级, 否则 RTOS 调度器将选择 调用了 taskYIELD() 的任务并使其再次运行。
如果 configUSE_PREEMPTION 设置 为 1,则 RTOS 调度器将始终运行 能够运行的优先级最高的任务,因此调用 taskYIELD() 将永远无法 切换到一个优先级更高的任务。
taskDISABLE_INTERRUPTS()
task. h
如果使用的移植支持 configMAX_SYSCALL_INTERRUPT_PRIORITY( 或 configMAX_API_CALL_INTERRUPT_PRIORITY)常量,那么 taskDISABLE_interrupts 将 禁用所有中断,或在 configMAX_SYSCALL_INTRUPT_PROJECT 设置之前屏蔽(禁用)中断。 检查 taskDISABLE_INTERRUPTS 在使用的移植中的实现。
如果使用的移植不支持 configMAX_SYSCALL_INTERRUPT_PRIORITY 常量, 那么 taskDISABLE_INTERRUPTS() 将对所有可屏蔽的中断进行全局禁用。
taskENABLE_INTERRUPTS()
task. h
启用微控制器中断。
什么是代码临界区
![](https://img-blog.csdnimg.cn/img_convert/9caa0c4e8683afd5bc1a17c3ef79a6cc.png)
关闭中断,可以使得任务不被中断影响
关闭PendSV,可以使得任务不被切换
taskENTER_CRITICAL(),taskEXIT_CRITICAL()
task. h
通过调用 taskENTER_CRITICAL() 进入临界区,随后 通过调用 taskEXIT_CRITICAL() 退出临界区。
taskENTER_CRITICAL_FROM_ISR(),taskEXIT_CRITICAL_FROM_ISR()
task. h
taskENTER_CRITICAL() and taskEXIT_CRITICAL() 版本 可用于中断服务程序 (ISR)。
在 ISR 中,通过调用 taskENTER_CRITICAL_FROM_ISR() 进入临界区, 然后通过调用 taskEXIT_CRITICAL_FROM_ISR() 退出。
临界区是直接屏蔽中断
vTaskStartScheduler,vTaskEndScheduler
task. h
void vTaskStartScheduler( void );
启动 RTOS 调度器。调用后,RTOS 内核可以控制在何时执行哪些任务。
空闲任务和可选的 定时器守护进程任务会自动创建(当 RTOS 调度器启动时)。
vTaskStartScheduler() 仅在没有足够的 RTOS 堆 可用来创建空闲或定时器守护进程任务时才会返回。
所有 RTOS 演示应用程序项目都包含使用 vTaskStartScheduler() 的示例,通常 位于 main.c 的 main() 函数中。
task. h
void vTaskEndScheduler( void );
注意: 这仅适用于 x86 Real Mode PC 移植。
vTaskSuspendAll,xTaskResumeAll
task. h
void vTaskSuspendAll( void );
挂起调度器。 挂起调度器会阻止上下文切换,但会让中断处于启用状态。
如果调度器被挂起时,中断请求切换上下文,那么请求将会被挂起。而且只有在调度器恢复(取消挂起)时才会执行。
在 vTaskSuspendAll() 之后调用 xTaskResumeAll() 会转换调度器的状态,取消其阻塞状态。
task. h
BaseType_t xTaskResumeAll( void );
恢复通过调用 vTaskSuspendAll() 挂起的调度器。
xTaskResumeAll() 仅恢复调度器, 不会取消挂起 之前通过调用 vTaskSuspend() 而挂起的任务。
vTaskStepTick
task.h
void vTaskStepTick( TickType_t xTicksToJump );
如果 RTOS 配置为使用无滴答空闲功能, 则只要空闲任务是唯一能够执行的任务, 滴答中断就会停止,并且微控制器会进入低功耗状态。 在退出低功率状态时, 必须校正滴答计数值, 以包含停止时所经过的时间。
总结:
![](https://img-blog.csdnimg.cn/img_convert/3f14efa837be1ad42fce9dd6a3833351.png)