【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 为传参

posted @   咸鱼菜菜籽  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示