You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F4中使用__set_PRIMASK()恢复临界区的疑问及文档解读

STM32F4临界区实现的PRIMASK相关疑问

旧临界区实现代码

uint32_t primask;
primask = __get_PRIMASK();
__disable_irq();

/* ... 临界代码 ... */

__set_PRIMASK(primask);

参考的中断恢复方式

曾看到一种恢复临界区中断掩码的写法:

if (!primask) {
     __enable_irq();
}

旧代码实际运行看似正常,但找不到同类示例,担心存在副作用。结合PRIMASK寄存器文档的模糊描述,有以下疑问:

  1. PRIMASK寄存器的位1-31为“保留”位,是否可以安全假设其值为0?若不能,是否应改用if ((primask & 1) == 0)进行判断?
  2. 文档标注向PRIMASK位0写入0“无效果”,但实际却能恢复之前的中断掩码,该如何理解这一描述?

同时想请教:使用__set_PRIMASK()退出临界区是否存在弊端?


内容的提问来源于stack exchange,提问作者Giuseppe Guerrini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:48:19