Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何确保特定代码段之间不能生成中断?_C_Dos_Interrupt Handling_Watcom - Fatal编程技术网

C 如何确保特定代码段之间不能生成中断?

C 如何确保特定代码段之间不能生成中断?,c,dos,interrupt-handling,watcom,C,Dos,Interrupt Handling,Watcom,我有一个关于代码片段之间的中断生成时间的问题 @“示例”代码 @“示例”ISR代码 需要注意的是:设置H/W寄存器后,“完成”时其值将为0 我的问题是:如果在2和3之间生成中断,则计数将增加一,因为步骤3尚未完成(值为0)。。。如果 交换2和3,则计数可能不会增加1,因为即使HW寄存器为0(一段时间后,完成),全局变量也为0 我的第一个想法是:2和3是否可能以某种方式“绑定在一起”,并且在3完成之前不允许生成中断 我使用watcom c并在DOS下测试 您可以使用内联汇编或对汇编程序中编写

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

@“示例”代码

@“示例”ISR代码

  • 需要注意的是:设置H/W寄存器后,“完成”时其值将为0
我的问题是:如果在23之间生成中断,则计数将增加一,因为步骤3尚未完成(值为0)。。。如果 交换23,则计数可能不会增加1,因为即使HW寄存器为0(一段时间后,完成),全局变量也为0

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

  • 我使用watcom c并在DOS下测试

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

您的意思是
CLI+2+3+STI
可以作为内联汇编或外部汇编函数编写?这是否意味着在这些汇编代码期间不会断言中断?只要
cli
发生在步骤2和步骤3之前运行的汇编中,而
sti
发生在步骤2和步骤3之后运行的汇编中,就可以了。最后,我只是屏蔽所使用的中断设备(而不是屏蔽“所有”可屏蔽中断)要通过配置8259s使其他中断正常工作,上述方法适用于基于引脚的中断模式。但是如果使用MSI(消息信号中断),如何为此“启用/禁用”MSI?嗯?基于引脚与MSI的比较应该只在硬件级别起作用。清除中断标志(通过
CLI
)可防止cpu对任何中断进行操作。
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
a. ...
b. if(global value is valid && H/W register is "0") then count++;