代码临界区保护 开关中断

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

}

相关推荐
春风解人意3 小时前
从零开始学习嵌入式P32----网络基础之TCP
c语言·网络·学习·tcp/ip
是隼人6 小时前
buuctf-pwn inndy_echo(32位fmt)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
刃神太酷啦7 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
是隼人11 小时前
buuctf-pwn mrctf2020_easy_equation(64位fmt)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
AC赳赳老秦11 小时前
文旅市场公开数据分析:基于 OpenClaw 采集景区客流与门票公示数据,生成区域文旅热度监测报告
java·c语言·python·php·symfony·deepseek·openclaw
HRTOS12 小时前
HRTOS应用示例:信号量机制详解
c语言·人工智能·嵌入式硬件·51单片机
从零开始的嵌入式之旅12 小时前
day36
linux·c语言·经验分享·笔记·嵌入式硬件
HRTOS12 小时前
HRTOS应用示例:Mutex互斥锁机制详解
c语言·单片机·嵌入式硬件·51单片机
Sumerking13 小时前
llc_control.c 专项评审(v3 更新版)
c语言·开发语言·算法·obc
繁星蓝雨14 小时前
C++设计原理———重载(extern “C“的由来、顺序依赖、语义依赖、overload、名称修饰符、对象操作、运算符重载、新增运算符、枚举和布尔类型)
c语言·c++·extern c·overload·重载·语义依赖·顺序依赖