Linux可加载模块精确计时

Linux loadable module precise timing

我已经编写了一个 linux 可加载内核模块来处理通过 GPIO 引脚的自定义串行协议以与嵌入式设备进行通信。

我使用这种方法是为了在控制 GPIO 转换时获得更高的优先级,从而获得更高的精度。我在 linx/delay.h.

中使用了 udelay/mdelay 函数

我在arduino板上实现了一个中断处理程序来打印输出,通过串行调试接口,GPIO转换之间的时间,时间似乎没有我预期的那么精确(请不要考虑调试接口引入的延迟,相同的问题在较低速度下可重现)。

你能告诉我如何发现它发生的原因,或者如何找到更好的方法,在 linux 模块内,以精确的时间间隔到 activate/deactivate GPIO 线吗?

非常感谢! 安东尼奥

编辑:

我会提供一些额外的信息。这些设备是:

  1. 发射器:C.H.I.P.:CPU Arm 1GHz,OS Ubuntu 15
  2. 接收器:Arduino NANO

我也想问你,默认的 UART 驱动程序如何以 fixed/precise 的时间速率传输

再次感谢!

我找到了使用 completion APIs 的解决方案。

谢谢你。