printk的问题
不知道哪里看到 printk 不能在中断里面使用? 能说明一下原因吗??
我在中断处理函数里面使用 printk 好像也能正常运行, 这是什么原因呢???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
不知道哪里看到 printk 不能在中断里面使用? 能说明一下原因吗??
我在中断处理函数里面使用 printk 好像也能正常运行, 这是什么原因呢???
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
你是中断处理函数还是下半部?
我就是在中断里面用的啊
static irqreturn_t handler(int irq,void * dev_id,struct pt_regs *regs)
{
printk("aaa");
return IRQ_HANDLED;
}
在ldd第三章就说了,printk可以在任何地方使用,甚至在中断中。
因为printk只是向一个环形buffer写数据,并不会造成中断嵌套,或锁死。
怪了,网上一些公司面试的题目里面还有说 PRINTK 不能用在中断里面呢?
不是严格禁用。只是printk会引入很大的时间(ms级)开销
printk是否是不可重入函数?(在baidu没有查到是)
printf倒是不可重入函数。printf()经常有重入和性能上的问题.
如果信号处理函数中使用了不可重入函数,那么信号处理函数可能会修改原来进程中不应该被修改的数据,这样进程从信号处理函数中返回接着执行时,可能会出现不可预料的后果。不可再入函数在信号处理函数中被视为不安全函数。
奇怪,那么如何调试信号处理函数呢?用什么函数把打印信息输出到terminal呢?