有关中断处理程序的问

时间:2010-09-09 23:54:29

标签: c linux-kernel

我可以在中断处理程序中执行浮点运算吗? (x86或64)另外我想知道我可以在中断处理程序中使用print函数吗?

2 个答案:

答案 0 :(得分:3)

在中断处理程序中,不要使用任何可以阻止的东西。这意味着除非它们是非阻塞的,否则不要使用打印功能。理想情况下,您的ISR应该执行清除中断所需的最低限度,然后启动正常线程来执行其余处理。如果需要print语句进行调试,那么考虑让程序的非ISR部分声明一个全局的volatile缓冲区并让你的ISR将调试数据写入其中。如果需要,您的非ISR代码可以检查缓冲区并printf来自它的数据。

您应该避免在ISR(以及一般的内核代码)中的浮点运算。

答案 1 :(得分:0)

大多数浮点单元可以生成除以零的异常等。如果您的代码在中断上下文中触发了这些异常中的一个,结果将非常混乱。

同样在x86上,一些内存/字符串操作具有使用浮点寄存器空间作为临时存储的MMX版本,因此它们可以执行64位读/写操作,因此根据处理器/内核配置,您可能会遇到一些令人讨厌的意外。 / p>

你最终可能会花很多时间调试这个,所以我的建议是尽量避免在内核代码中使用浮点数。