STM32F4中使用__set_PRIMASK()恢复临界区的疑问及文档解读
STM32F4临界区实现的PRIMASK相关疑问
旧临界区实现代码
uint32_t primask; primask = __get_PRIMASK(); __disable_irq(); /* ... 临界代码 ... */ __set_PRIMASK(primask);
参考的中断恢复方式
曾看到一种恢复临界区中断掩码的写法:
if (!primask) { __enable_irq(); }
旧代码实际运行看似正常,但找不到同类示例,担心存在副作用。结合PRIMASK寄存器文档的模糊描述,有以下疑问:
- PRIMASK寄存器的位1-31为“保留”位,是否可以安全假设其值为0?若不能,是否应改用
if ((primask & 1) == 0)进行判断? - 文档标注向PRIMASK位0写入0“无效果”,但实际却能恢复之前的中断掩码,该如何理解这一描述?
同时想请教:使用__set_PRIMASK()退出临界区是否存在弊端?
内容的提问来源于stack exchange,提问作者Giuseppe Guerrini
相关产品推荐
相关产品推荐

