我有一个关于代码片段之间的中断生成时间的问题......
@“示例”代码
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
@“示例”ISR 代码
a. ...
b. if(global value is valid && H/W register is "0") then count++;
- 需要注意的一点:硬件寄存器设置后,“完成”时其值为0!
我的问题是:如果在2和3之间产生中断,那么计数将增加一,因为步骤3尚未完成(值为 0)......如果交换2和3,那么计数可能不会加1,因为即使硬件寄存器为0(一段时间后,完成)全局变量为0!
我的第一个想法是:是否有可能2和3可以以某种方式“捆绑在一起”,并且在3完成之前不允许产生中断?
- 我使用 watcom c 并在 DOS 中测试...