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
}