如何软件中断C中的运行功能?

时间:2012-12-11 10:41:40

标签: c windows-xp x86 mingw interrupt

我想在函数运行时生成一个中断,然后我希望CPU执行一些特定的ISR,在完成ISR后,该函数将重新开始执行。我使用的是Windows XP和MinGW编译器。

3 个答案:

答案 0 :(得分:1)

  

实际上没有硬件我想先以某种方式生成中断并稍后处理它我将在实际硬件上执行它

真正的硬件中断将切换其中一个CPU引脚并使其分配给ISR。我无法想到任何真正透明的方式来模仿它。

暂停当前运行的函数的一种方法可能是使用SuspendThread function,然后使用不同的线程来运行ISR。

调查的另一种可能性可能是使用Fibers


修改

cxxl's answer所述,另一种可能性是使用实时优先级线程:

  • 有两个线程,一个用于运行您的函数,另一个线程用于运行模拟的ISR
  • 在两个线程上使用“CPU affinity”功能,以确保它们都在同一个CPU上运行
  • 将ISR线程的优先级设置为“realtime”

然后,只要你允许ISR仿真线程运行,它就会先占用另一个线程。

答案 1 :(得分:1)

从此处获取Windows驱动程序工具包:http://msdn.microsoft.com/en-us/library/windows/hardware/gg487428.aspx。它包含用于编写设备驱动程序的头文件和库。如果要处理中断,则需要编写设备驱动程序。

您可以编写设备驱动程序并使用DPC,这是ISR的工作者功能。这些DPC可以在软件中调用,并且仍然以比任何用户模式代码更高的优先级执行。 ISR本身通常非常短,只需处理中断,保存数据并将控制权交给DPC。

我怀疑你能在MinGW中做到这一点,但我想你需要MS Visual C,但有一个免费的Express版本。见这里:http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products

确定您需要中断?您可以在用户模式下使用管理员权限和实时优先级做很多事情......

答案 2 :(得分:0)

正如其他人所说,这是一个非常模糊的问题。

有些CPU有办法通过软件强制/伪造中断,你可以调查一下。 (我不知道x86,我是嵌入式开发者)

在操作系统中,您可以/应该能够中断一个进程/线程与另一个进程/线程。再说一遍,我不是一个Win程序员,所以不能说真的。

否则,根据具体情况,您可以运行一些主循环来调用您的子程序,并且每次都检查“中断条件”(无论可能是什么)并且分支或设置标志以指示事情已经发生/需要发生。