我有一个关于代码片段间中断生成时间的问题......
@“example”代码
1. ...
2. assign value to global variable // 0/1 means invalid/valid
3. set H/W register via memory-mapped IO method // 0 means completed
@“example”ISR代码
a. ...
b. if(global value is valid && H/W register is "0") then count++;
我的问题是 :如果在 2 和 3 之间产生中断,那么计数将会增加一个因为步骤 3 尚未完成(值为0)...如果 交换 2 和 3 ,那么可能计数不会增加1,因为即使HW寄存器为0(经过一段时间,完成)全局变量为0!
我的第一个想法是:是否可能 2 并且 3 可以某种方式“捆绑在一起”,并且在 3之前不允许生成中断已完成?
答案 0 :(得分:3)
您可以使用内联汇编或调用汇编程序编写的外部函数来调用x86 CLI
和STI
指令来禁用和启用中断。