关于临界保护与中断关闭

抢占优先级高”的中断可以把“抢占优先级低”的中断给打断。
响应优先级,抢占先级相同的两个中断,响应先级高那个优先响应,但不能打断。
NVIC_PriorityGroupConfig   0  1  2  3  4
抢占优先级占位                    0  1  2  3  4
相应优先级占位                    4  3  2  1  0
basepri 设置为某个值(5)让系统不响应比该优先级低(5-15)的中断(抢占优先级),而优先级比之更高(0-4)的中断则不受影响

详见:https://blog.csdn.net/qq_31073871/article/details/90691330?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7Edefault-1.control

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stm32代码临界保护是指在使用FreeRTOS操作系统时,保护临界区代码不被打断的一种机制。当进入临界区代码时,FreeRTOS会停止对其他任务的调度,关闭中断,以保证临界区代码的正常执行。这个过程类似于拥有一个保护伞,直到任务退出临界区才会恢复中断响应。 在stm32代码中,使用portDISABLE_INTERRUPTS()函数来实现关闭中断的功能。同时,使用uxCriticalNesting变量来记录临界区嵌套的次数。只有当uxCriticalNesting等于0时,才可以开启中断。这样可以确保在有多个临界区代码保护的情况下,不会因为一个临界区代码保护退出而打开中断,影响其他的临界区代码保护。只有当所有临界区代码保护退出后,中断才会被打开。 在stm32中,中断服务函数也可以进入临界区。调用taskENTER_CRITICAL_FROM_ISR()函数可以实现这一功能。该函数的返回值ulReturn需要保存,以便在退出临界区时写入。通过设置BASEPRI寄存器的值为configMAX_SYSCALL_INTERRUPT_PRIORITY,可以达到关闭中断的效果。在退出临界区时,将保存的ulReturn值重新写入BASEPRI寄存器,以恢复中断。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [FreeRTOS临界段代码保护[STM32]](https://blog.csdn.net/m0_63741844/article/details/124067707)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值