使用printf()时,Spi中断处理程序工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用printf()时,Spi中断处理程序工作相关的知识,希望对你有一定的参考价值。

我试图在omap处理器和sam4l之间启动spi通信。我已经配置了spi协议,omap是主服务器。现在我看到的是我发送的测试数据正确到达sam4l,我可以看到isr正在打印该数据。在isr中使用更多printf使得操作发生并且相应的操作发生,但是如果我删除所有printfs,我看不到任何操作发生。造成这种异常的原因是什么?这是错误频率设置的常见情况吗?如果需要代码,我也会发布,但它很大。谢谢

答案

我想你正试图在驱动程序中打印消息。

由于在控制台上打印消息会降低驱动程序的速度,因此它的行为可能会很慢并且您的驱

通过将/ proc / sys / kernel / printk编辑为4 4 1 7,使用pr_info()进行调试并将更改设置更改为控制台上的消息

- >它会将调试消息存储在缓冲区中。

- >由于屏幕上打印消息,驱动程序不会减速。

- >然后你可以通过输入dmesg命令来查看它。

然后找到可能导致错误的原始问题。

另一答案

如果一个例程与printf“在这里和那里”一起使用而不是其他方式,那么问题几乎就是时间问题。作为一个简单的例子,假设您写入SPI闪存然后检查其内容。闪存写入需要一些时间,因此如果您立即检查,数据将无效,但如果您在其间插入printf调用,则可能需要足够的时间使回读现在有效。

以上是关于使用printf()时,Spi中断处理程序工作的主要内容,如果未能解决你的问题,请参考以下文章

我可以设置工作队列的优先级吗?

STM32 HAL SPI 中断处理

请教STM32的 SPI 同时中断收发问题

cubemxw5500中断

中断函数中不能使用printf的原因

ISR中断服务程序