FreeRTOS——内核控制(3)

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

启用微控制器中断。


什么是代码临界区

关闭中断,可以使得任务不被中断影响

关闭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 配置为使用无滴答空闲功能, 则只要空闲任务是唯一能够执行的任务, 滴答中断就会停止,并且微控制器会进入低功耗状态。 在退出低功率状态时, 必须校正滴答计数值, 以包含停止时所经过的时间。

总结:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值