我编写了一个 Linux 可加载内核模块,用于通过 GPIO 引脚处理自定义串行协议(protocol),从而与嵌入式设备进行通信。
我使用这种方法是为了在控制 GPIO 转换时获得更高的优先级和更高的精度。我在 linx/delay.h 中使用了 udelay/mdelay 函数。
我在arduino板上实现了一个中断处理程序,通过串行调试接口(interface)打印输出GPIO转换之间的时间,并且计时似乎没有我预期的那么精确(请不要考虑延迟由调试接口(interface)引入,相同的问题在较低速度下可重现)。
您能告诉我如何找出发生这种情况的原因,或者如何在 Linux 模块内找到更好的方法,以精确的时间间隔激活/停用 GPIO 线?
非常感谢! 安东尼奥
编辑:
我会提供一些额外的信息。这些设备是:
- 发射器:C.H.I.P. :CPU Arm 1GHz,操作系统 Ubuntu 15
- 接收器:Arduino NANO
我还想问你,默认的 UART 驱动程序如何以固定/精确的时间速率进行传输。
再次感谢您!
最佳答案
我通过使用 completion APIs 找到了解决方案.
无论如何,谢谢你。
关于c - Linux可加载模块精确定时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44500455/