大家都知道中断处理程序应该越短越好。并且在中断处理程序中添加像 printk
这样的函数来进行调试是不应该做的。
实际上,我之前在为我编写的中断驱动的字符设备调试 linux 内核时尝试过它,它破坏了驱动程序的时序。
我的问题是,为什么会这样?
printk
函数被缓冲了!这意味着,据我所知,数据已插入到队列中,并且稍后会对其进行处理,很可能是在中断处理程序完成之后。
那么为什么它不起作用呢?
最佳答案
printk
函数不仅仅是插入队列/缓冲区——假设日志级别足够高,printk
的输出将立即发送到控制台,作为调用 printk
的一部分。如果控制台在串行端口上,这会特别慢。但无论如何,printk
确实引入了相当大的开销并且会影响时序。
如果您在时间关键的地方想要获得一些调试输出,您可以考虑在现代内核中使用 trace_printk
函数。这实际上只是将输入放入跟踪环形缓冲区,您可以稍后阅读。看看this article了解全部详情。
关于c - 中断处理程序中的 printk,真的那么糟糕吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8738951/