代码临界区保护 开关中断

LOCAL_INLINE void OsIf_SuspendAllInterrupts(void)

{

#if defined(USING_AUTOSAR_OS)

SuspendAllInterrupts(); // AUTOSAR 环境直接调用标准接口

#else

uint32 PriMask = __get_PRIMASK(); // 1. 保存当前中断状态

__disable_irq(); // 2. 全局禁用所有可屏蔽中断

if (OsIf_CriticalNesting == 0) // 3. 首次进入临界区时保存原始状态

{

OsIf_PriMaskValue = PriMask;

}

OsIf_CriticalNesting += 1; // 4. 嵌套计数+1

#endif

}

LOCAL_INLINE void OsIf_ResumeAllInterrupts(void)

{

#if defined(USING_AUTOSAR_OS)

ResumeAllInterrupts(); // AUTOSAR 环境直接调用标准接口

#else

OsIf_CriticalNesting -= 1; // 1. 嵌套计数减 1

if (OsIf_CriticalNesting <= 0) // 2. 判断是否为最外层退出

{

__set_PRIMASK(OsIf_PriMaskValue); // 3. 恢复原始中断状态

}

#endif

}

相关推荐
知识分享小能手13 小时前
C学习教程,从入门到精通,C语言文件 — 完整知识点详解(14)
c语言·网络·学习
羊羊一洋13 小时前
ROM&RAM
c语言·stm32·学习
库玛西14 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法
潜创微科技17 小时前
CH591:成本优化的青稞 RISC-V 无线 MCU
c语言·单片机·risc-v·低延迟·沁恒·青稞
番茄灭世神17 小时前
PN学堂GD32课程第15篇——HardFault异常
c语言·单片机·嵌入式
吠品18 小时前
Flutter 工程配本地 Maven 引 AAR,仓库声明为啥不生效
c语言·人工智能·算法
en.en..19 小时前
volatile 完整深度教程(C 代码 + 带注释 ARM 汇编 + 硬件中断原理 + 分步运行时序)
c语言·汇编·arm开发
inrichtt20 小时前
第十课时:中断优先级揭秘:抢占与嵌套的底层逻辑:
c语言·stm32·单片机·嵌入式硬件·github
学逆向的20 小时前
C printf原型解析
c语言·开发语言·网络安全
BeiGuTing_code21 小时前
C字符输出:一个换行符引发的“失踪案”
c语言·开发语言