c - Linux可加载模块精确定时

标签 c linux linux-device-driver

我编写了一个 Linux 可加载内核模块,用于通过 GPIO 引脚处理自定义串行协议(protocol),从而与嵌入式设备进行通信。

我使用这种方法是为了在控制 GPIO 转换时获得更高的优先级和更高的精度。我在 linx/delay.h 中使用了 udelay/mdelay 函数。

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

您能告诉我如何找出发生这种情况的原因,或者如何在 Linux 模块内找到更好的方法,以精确的时间间隔激活/停用 GPIO 线?

非常感谢! 安东尼奥

编辑:

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

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

我还想问你,默认的 UART 驱动程序如何以固定/精确的时间速率进行传输

再次感谢您!

最佳答案

我通过使用 completion APIs 找到了解决方案.

无论如何,谢谢你。

关于c - Linux可加载模块精确定时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44500455/

相关文章:

linux - 无法获取 .screenrc,它说找不到命令

linux - 如何更改 Linux 显示驱动程序中支持的刷新率?

linux - 在驱动程序中读取内核命令行参数

linux - 学习内核编程

c - 如何使用 ffmpeg 库从视频中提取灰度图像?

c - 是否可以检索创建 WDFREQUEST 的 CPU?

linux - NDK 会去除调试信息吗?

c - LNK 2001 : Unresolve external symbol struct **

c - 使用 Win32 和视觉样式的按钮背景透明度

linux - 无法在 syslog 消息中获取 Rsyslog 结构化数据