如何确保特定代码段之间无法生成中断?

时间:2013-04-09 02:37:01

标签: c dos interrupt-handling watcom

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

@“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++;
  • 有一点需要注意:设置H / W寄存器后,“完成”时其值为0!

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

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

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

1 个答案:

答案 0 :(得分:3)

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