中断处理程序中的C printf()?

use*_*625 9 c multithreading interrupt-handling

我听说C中的printf()不应该用于ISR.是因为它是一个阻止呼叫,还是因为它不是可重入的?

如果printf()不是可重入的,那么它不会意味着它也不能用于多线程程序,除非它以某种方式"同步"吗?

谢谢,

unw*_*ind 6

我认为可能是所有这些,甚至更多.典型的printf()实现可以进行动态(堆)内存分配,这通常不是最快的事情,也可能存在不可重入的问题.因为你通常不应该在中断服务程序中花费太多时间,所以牢固性很重要.

有关和的讨论,请参阅此答案.printf()malloc()