stm32代码临界保护
时间: 2023-09-25 16:12:32 浏览: 186
stm32 嵌入式RTOS
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 ]
阅读全文