【FreeRTOS学习笔记 】临界段
结论:
用户能关的中断有限制,这个值在 FreeRTOSConfig_user.h 设置;
用户退出临界区时,得等所有用户都退出了临界区,才会开中断;
系统能关所有中断,这个值可以在使用的时候设置;
系统开关中断都不会影响FreeRTOS的软件实现的中断嵌套计数器
代码,注释为对应效果:
/* 声明进入临界段 */
/*
basepri == configMAX_SYSCALL_INTERRUPT_PRIORITY
uxCriticalNesting ++
断言 if uxCriticalNesting == 1 && SCB_ICSR 的低 8 位不等于 0,......
*/
#define taskENTER_CRITICAL() portENTER_CRITIVAL()
/* basepri == configMAX_SYSCALL_INTERRUPT_PRIORITY */
#define taskENTER_CRITICAL_FROM_ISR() portSET_INTERRUPT_MASK_FROM_ISR()
/* 声明退出临界段 */
/*
断言 if uxCriticalNesting == 0,......
uxCriticalNesting --
if uxCriticalNesting == 0,basepri == 0
*/
#define taskEXIT_CRITICAL() portEXIT_CRITICAL()
/* basepri == x */
#define taskEXIT_CRITICAL_FROM_ISR( x ) portCLEAR_INTERRUPT_MASK_FROM_ISR( x )
先忽略断言的功能;
1.任务用临界
a.关中断(进入临界区)会立刻设置 basepri 为最大可屏蔽中断的值,并在 uxCriticalNesting ++
b.开中断(离开临界区)必须先判断 uxCriticalNesting -- 的值是否等于0,是的话才设置 basepri 为0
2.中断用临界
a.关中断(进入临界区)会立刻设置 basepri 为最大可屏蔽中断的值
b.开中断(离开临界区)可以手动设置 basepri 为传参
分类:
FreeRTOS学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~