我想知道是否可以从 C++ 代码访问处理器中断(我想我需要使用汇编代码)。
事情是这样的。我习惯于使用嵌入式系统(PIC、ARM7 和 Atmel 处理器),我可以毫无问题地编写中断程序(我使用 C)。所有寄存器都已映射,总而言之,这很容易,具体取决于应用程序。现在我正在使用 x86 和 x64 架构,我希望(强调 WANT)能够在这些处理器中执行相同的操作。
例如:我希望在 C++ 中有一个线程运行一段代码,该代码不断验证当前按下的键,而无需按下回车键(cin、getchar 等)。我想编写一个定时器中断,这样我就可以在特定时间执行操作。我知道我想做的很多事情都可以通过操作系统完成,但我真的很想拥有自己做这些的自由。
目前我正在使用 Linux (Ubuntu),但我肯定会很快使用 Windows,如果这是回答该问题所需的信息的话
最佳答案
对于用户级进程,中断被信号取代。您可以通过调用 setitimer
安排将信号发送到您的进程。但最有可能的是,做您想做的事情的最佳方式是以下两种方式之一:
使用事件循环。基本上,将您的程序编写为一个巨大的循环,定期检查是否有任何需要做的事情。在循环中,检查时间、检查按键等等。做一些你需要做的事情,然后再次循环。
使用线程。您可以有一个线程来观察时间和触发计时器作业。您可以让一个线程阻塞
read
,以便在数据到达时充当中断。
您的脑海中可能已经深深地意识到,您在中断处理程序本身中所做的工作很少,通常只是将信息传递给在正常上下文中运行的其他代码。好吧,操作系统已经为您完成了这部分工作。您只需编写等待中断处理程序(或任何需要的)检测并开始处理事件的代码。
I want to have a thread in c++ running a code that constantly verifies the key being pressed at the moment without pressing the enter key (cin, getchar, etc).
那就这样吧。这需要一个线程,并且需要将终端的输入模式更改为不需要回车键的模式。这与中断无关。
关于c++ - 使用 c++ 和 x86 和 x64 架构访问处理器中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12187269/