使用c ++和x86和x64体系结构访问处理器中断

时间:2012-08-29 22:14:44

标签: c++ c windows linux

我想知道是否可以从c ++代码访问处理器中断(我想我需要使用汇编代码)。

这就是事情。我习惯使用嵌入式系统(PIC,ARM7和Atmel处理器),我可以毫无问题地编程中断(我使用C)。所有寄存器都被映射,总而言之,这很容易,具体取决于应用程序。现在我正在使用x86和x64架构,我希望(强调 WANT )能够在这些处理器中做同样的事情。

例如:我想在c ++中运行一个代码,该代码在不按Enter键(cin,getchar等)的情况下不断验证当前按下的键。我想编写一个定时器中断,以便我能够在特定时间执行操作。我知道我想做的很多事情都可以通过操作系统来完成,但我真的希望自己有这样做的自由。

目前我正在使用Linux(Ubuntu),但我很快就会使用Windows,如果这是回答该问题所需的信息

2 个答案:

答案 0 :(得分:5)

对于用户级进程,中断由信号替换。您可以通过致电setitimer安排向您的流程发送信号。但最有可能的是,做你想要做的事情的最好方法是做两件事之一:

  1. 使用事件循环。基本上,将程序编写为一个巨大的循环,定期检查是否有任何需要做的事情。在循环中,检查时间,检查按键等。做一些你需要做的工作,然后再循环。

  2. 使用线程。您可以拥有一个线程来观察时间并触发计时器作业。你可以在read上阻塞一个线程,以便在数据到达时充当中断。

  3. 可能只是在你的脑海中钻了你在中断处理程序本身做最小的工作,通常只是将信息传递给在正常上下文中运行的其他代码。那么,操作系统已经为你做了那部分。您只需编写等待中断处理程序(或任何需要的)的代码来检测并开始处理事件。

      

    我想在c ++中运行一个代码,该代码在不按Enter键(cin,getchar等)的情况下不断验证当前按下的键。

    那样做。这需要一个线程,它需要将终端的输入模式更改为不需要输入密钥的模式。这与中断无关。

答案 1 :(得分:0)

对于Windows:

Windows在隐藏低级硬件访问(如访问cpu中断)方面做得非常好,原因是win内核正在使用它们在进程和其他内部资源之间进行切换。 因此,您需要编写驱动程序以获得直接硬件访问权限,或者让您在执行环中执行代码< 3(用户模式)。

但是出于教育目的,您可以使用DOS甚至Windows DOS窗口,甚至可以模拟中断。当然,您将使用一些编译器,如Borland C ++ 3.x(dos 16bit)。 setvect和getvect可用于中断挂钩。

相关问题