2

我有一个关于代码片段之间的中断生成时间的问题......

@“示例”代码

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!

我的问题是:如果在23之间产生中断,那么计数将增加一,因为步骤3尚未完成(值为 0)......如果交换23,那么计数可能不会加1,因为即使硬件寄存器为0(一段时间后,完成)全局变量为0!

我的第一个想法是:是否有可能23可以以某种方式“捆绑在一起”,并且在3完成之前不允许产生中断?

  • 我使用 watcom c 并在 DOS 中测试...
4

1 回答 1

3

您可以使用内联汇编或调用用汇编程序编写的外部函数来调用 x86CLISTI用于禁用和启用中断的指令。

于 2013-04-09T02:42:24.580 回答