为什么在中断函数中不能使用printf打印函数

如题所述

第1个回答  2022-06-07
在嵌入式设计中,一般不建议在中断函数中调用打印函数printf来打印调试信息,如果真这么做了,可能发生的结果包括:

需要分各种情况讨论。
按照中断函数的行为,有些中断函数为了防止中断嵌套,会将中断临时禁用。
按照printf的实现方式,有些会通过轮询方式实现;优先会通过串口中断方式实现。

如果中断函数中禁用了中断
-- 如果调用的printf依赖中断打印,则会造成printf无法完成打印
-- 如果调用的printf通过轮询方式实现,打印一段字符的时间过长,大大降低中断处理效率,而且在中断禁用期间可能会错失很多其他中断

如果中断函数中没有禁用中断
-- printf函数执行过程中,可能主中断可能会再次被触发,从而再次调用printf,造成printf函数的重入。而很多printf函数由于调用了全局资源,是不支持可重入的,会造成灾难性后果。

最好的实现方式就是,发生中断时,设置标志,构造一个尽量简短的ISR,将printf等其他工作单独创建相应的线程去执行。



相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网