我正在调试一些中断服务程序(ISR),每当我进入ISR时需要打印出几个寄存器的内容。固件位于C.
每隔几毫秒就会产生一次中断,如果我将printf()发送到控制台,它就太慢了,我最终错过了中断。什么是最快的打印方式 - 无论是缓冲区,文件还是控制台 - 以及任何提示?
[附加信息:我需要在ISR中做一些其他事情 - 例如中断屏蔽和比较,复位中断,启用中断并最终打印出一些寄存器。]
由于
答案 0 :(得分:1)
最快的方法是将相关数据存储在缓存中的某个位置,然后在有时间的情况下将其打印出来。打印到控制台肯定很慢,使用printf也许不是一个好主意,特别是如果要转换几个变量。
由于我不知道代码的动态,我只能给出一些建议。
为您的数据定义数据结构。预分配一个足够大的数组,然后放入ringbuffer机制,处理ISR当前可以写入的索引。对于ISR,这应该相当快,因为它只是填充下一个空槽中的值。
在主程序中,您可以随意打印。但是,您必须同步访问权限,并且还要注意ISR不会比丢弃数据更快地生成数据。至少使用适当的环形缓冲区,它不应该崩溃,但你可能会丢失信息。
答案 1 :(得分:0)
您可以使用C89' setvbuf()