首页 > 解决方案 > RPi4:设备驱动程序 - 微秒延迟/计数

问题描述

我是 Linux 设备驱动程序的初学者。我正在尝试使用Raspberry Pi 4B实现超声波传感器(HC-SR04)的设备驱动程序,详细信息如下:

现在面临的问题是为传感器的触发创建微秒延迟,还需要找到 ECHO 信号的微秒持续时间。我尝试使用usleep()但它给了我隐含的错误,即使在尝试了其他论坛中解释的方法(如添加#define _BSD_SOURCE)后我也无法解决。在搜索时发现jiffies无法提供微秒精度。clock()函数或sched_clock ()都不断给出错误。

如果你们中的任何人都可以建议我一种在设备驱动程序中实现微秒延迟和计数的方法,那将非常有帮助。

先感谢您。

[解决了]

udelay( )解决了 header 的微秒延迟问题linux/delay.h

另一个问题是以微秒为单位查找进程的持续时间,这可以通过以下代码解决

volatile unsigned int data = 0;
volatile ktime_t start;

start = ktime_get();
// process to check

data= (unsigned int) ktime_to_ns( ktime_sub( ktime_get(), start ) );
data /= 1000; // convert nanaosecond to microsecond

标签: linux-kernelraspberry-piembeddedlinux-device-driverraspberry-pi4

解决方案


udelay()应该是您正在寻找的功能。

usleep()是标准库中的一个函数,因此不能在内核空间中使用。您将不得不使用 linux 计时器。有关详细信息,请参阅文档


推荐阅读