Printf缓冲 - 比控制台更快?

时间:2013-05-28 17:14:08

标签: c interrupt interrupt-handling

我正在调试一些中断服务程序(ISR),每当我进入ISR时需要打印出几个寄存器的内容。固件位于C.

每隔几毫秒就会产生一次中断,如果我将printf()发送到控制台,它就太慢了,我最终错过了中断。什么是最快的打印方式 - 无论是缓冲区,文件还是控制台 - 以及任何提示?

[附加信息:我需要在ISR中做一些其他事情 - 例如中断屏蔽和比较,复位中断,启用中断并最终打印出一些寄存器。]

由于

2 个答案:

答案 0 :(得分:1)

最快的方法是将相关数据存储在缓存中的某个位置,然后在有时间的情况下将其打印出来。打印到控制台肯定很慢,使用printf也许不是一个好主意,特别是如果要转换几个变量。

由于我不知道代码的动态,我只能给出一些建议。

为您的数据定义数据结构。预分配一个足够大的数组,然后放入ringbuffer机制,处理ISR当前可以写入的索引。对于ISR,这应该相当快,因为​​它只是填充下一个空槽中的值。

在主程序中,您可以随意打印。但是,您必须同步访问权限,并且还要注意ISR不会比丢弃数据更快地生成数据。至少使用适当的环形缓冲区,它不应该崩溃,但你可能会丢失信息。

答案 1 :(得分:0)

您可以使用C89' setvbuf()

切换缓冲