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