STM32F1+HAL库+FreeTOTS学习6——临界段代码保护函数&任务调度器的挂起和恢复函数

STM32F1+HAL库+FreeTOTS学习6——临界段代码保护函数

上一期我们学习了FreeRTOS的内核中断管理以及中断屏蔽控制函数,下面我们来学习临界端代码保护函数的使用

临界段

临界段也叫临界区,指的是必须完整运行完,不能被任务调度、中断等事件打断的代码段,适用于一些需严格按照时序初始化的外设、比如IIC、SPI等,还有就是一些系统自身的需要、用户需求等。。。

在我们之前操作系统的代码中,开始任务创建其他任务也用到了临界段代码保护函数,如图:

在这里插入图片描述
下面我们来了解一下具体的用法:

临界段代码保护函数

临界段代码保护函数中关闭任务调度,并且屏蔽中断响应

函数描述
taskENTER_CRITICAL()任务级进入临界段
taskEXIT_CRITICAL()任务级退出临界段
taskENTER_CRITICAL_FROM_ISR()中断级进入临界段
taskEXIT_CRITICAL_FROM_ISR()中断级退出临界段
  • 临界区是直接屏蔽了中断,系统任务调度靠中断,ISR也靠中断
  • 具有成对使用、支持嵌套、的特点

具体使用方法如下:


/*
需要注意的是,尽量保持临界段耗时短,需要快进快出
*/

/*任务中进入临界区*/
taskENTER_CRITICAL() ;
{
        … …	/* 临界区代码 */
}
taskEXIT_CRITICAL()	;
/*任务中推出临界区*/

/*中断中进入临界区*/
uint32_t  save_status;
save_status  = taskENTER_CRITICAL_FROM_ISR(){
        … …	/* 临界区代码 */
}
taskEXIT_CRITICAL_FROM_ISR(save_status );
/*中断中推出临界区*/

任务调度器的挂起和恢复函数

与临界段代码保护函数不同,任务调度器的挂起智慧关闭任务调度,但是中断依然可以响应

函数描述
vTaskSuspendAll()挂起任务调度器
xTaskResumeAll()恢复任务调度器
  • 与临界区不一样的是,挂起任务调度器,未关闭中断;
  • 它仅仅是防止了任务之间的资源争夺,中断照样可以直接响应
  • 挂起调度器的方式,适用于临界区位于任务与任务之间;既不用去延时中断,又可以做到临界区的安全

具体使用方法如下:


/*挂起任务调度器,关闭任务调度,但不屏蔽中断*/
vTaskSuspendAll() ;
{
        … …	/* 内容 */
}
xTaskResumeAll()	;
/*恢复任务调度器,打开任务调度,但不屏蔽中断*/
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想写代码的我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值