【FreeRTOS】7.STM32移植-内核控制函数与临界区

内核控制函数

函数 taskYIELD()

此函数用于进行任务切换, 此函数本质上是一个宏。

临界区

代码保护,在临界区的任务拒绝任务调度的打断。如读取IIC数据,不能被打断,需进入临界区。

函数描述
taskYIELD()任务切换。
taskENTER_CRITICAL()进入临界区,用于任务中。
taskEXIT_CRITICAL()退出临界区,用于任务中。
taskENTER_CRITICAL_FROM_ISR()进入临界区,用于中断服务函数中。
taskEXIT_CRITICAL_FROM_ISR()退出临界区,用于中断服务函数中。
taskDISABLE_INTERRUPTS()关闭中断(对5-15优先级的中断有效)。
taskENABLE_INTERRUPTS()打开中断(对5-15优先级的中断有效)。
vTaskStartScheduler()开启任务调度器。
vTaskEndScheduler()关闭任务调度器(stm32不适用,可能仅用于x86)。
vTaskSuspendAll()挂起任务调度器(数值加加)。
xTaskResumeAll()恢复任务调度器(挂起几次,恢复也几次)。
vTaskStepTick()设置系统节拍值

什么是临界段?

临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段,比如有的外设的初始化需要严格的时序,初始化过程中不能被打断。FreeRTOS在进入临界段代码的时候需要迸闭中断,当处理完临界段代码以后再打开中断。

API函数:

函数描述
taskENTER_CRITICAL()任务级进入临界段
taskEXIT_CRITICAL()任务级退出临界段
taskENTER_CRITICAL_FROM_ISR()中断级进入临界段
taskEXIT_CRITICAL_FROM_ISR()中断级退出临界段

特点:成对出现、快进快出

uxCriticalNesting++;调用几次进入,就需要几次退出。

代码示例:

任务级:

taskENTER_CRITICAL();
// user code
taskEXIT_CRITICAL();

中断级:

uint32_t status_value = 0;

status_value = taskENTER_CRITICAL_FROM_ISR();
// user code
taskEXIT_CRITICAL_FROM_ISR(status_value);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值