FreeRTOS临界段代码保护及调度器挂起与恢复

临界段代码保护

临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段

适用场合

  1. 外设:需严格按照时序初始化的外设:I2C、SPI等等
  2. 系统:系统自身需求
  3. 用户:用户需求

临界段代码保护函数 

 FreeRTOS 在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断

临界区是直接屏蔽了中断,系统任务调度靠中断,ISR也靠中断

函数 

特点

  1. 成对使用
  2. 支持嵌套(与单纯的开关中断最大的区别)
  3. 尽量保持临界段耗时短

任务调度器的挂起和恢复 

挂起任务调度器, 调用此函数不需要关闭中断 

函数 

特点

  1. 与临界区不一样的是,挂起任务调度器,未关闭中断;
  2. 它仅仅是防止了任务之间的资源争夺,中断照样可以直接响应;
  3. 挂起调度器的方式,适用于临界区位于任务与任务之间;既不用去延时中断,又可以做到临界区的安全

调度器挂起和恢复API函数 

1、挂起任务调度器:vTaskSuspendAll()

调用一次挂起调度器,该变量uxSchedulerSuspended就加一

变量uxSchedulerSuspended的值,将会影响Systick触发PendSV中断,即影响任务调度

2、恢复任务调度器:xTaskResumeAll()

调用一次恢复调度器,该变量uxSchedulerSuspended就减一 ,如果等于0,则允许调度
  1. 将所有在xPendingReadyList中的任务移到对应的就绪链表中
  2. 移除等待就绪列表中的列表项,恢复至就绪列表,直到xPendingReadyList列表为空

二者 最大 区别

临界段代码保护函数,关闭中断;关中断 意味着完整使用代码段,不受干扰,速度很快

挂起任务调度器,未关闭中断;不关 意味着只是将任务与任务之间隔开,中断同样可以响应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值