ZHCUAQ1F july 2015 – april 2023
C/C++ 编译器支持三种内在函数,用于启用、禁用和恢复中断。语法为:
unsigned int | _disable_interrupts ( ); |
unsigned int | _enable_interrupts ( ); |
void | _restore_interrupts (unsigned int); |
_disable_interrupts() 和 _enable_interrupts( ) 内在函数均返回 unsigned int,之后可传递给 _restore_interrupts( ),以恢复之前的中断状态。这些内在函数产生优化的边界,因此适用于实施临界(或原子)代码段。例如,
unsigned int restore_value;
restore_value = _disable_interrupts();
if (sem) sem--;
_restore_interrupts(restore_value);
示例代码禁用了中断,因此在 then 子句中修改 sem 之前,为条件子句读取的 sem 值不会改变。内在函数产生优化的边界,因此内存读取和写入 sem 不会越过 _disable_interrupts 或 _restore_interrupts 位置。
_restore_interrupts( ) 内在函数会用参数值覆盖 CSR 控制寄存器。在 _disable_interrupts( ) 内在函数或 _enable_interrupts( ) 内在函数之后,CSR 位的所有更改均会丢失。
_restore_interrupts( ) 内在函数不使用 RINT 指令。