RPi4:设备驱动程序 - 微秒 delay/count
RPi4 : Device driver - microsecond delay/count
我是 Linux 设备驱动程序的初学者。我正在尝试使用 Raspberry Pi 4B 实现超声波传感器 (HC-SR04) 的设备驱动程序,详细信息如下:
- OS : Raspberry Pi OS ( Raspbian GNU/Linux 10 克星 ) ( 版本 = 10 克星 )
- Linux 版本:Linux raspberrypi 5.10.20-v7l+ armv7l GNU/Linux
现在面临的问题是为传感器的触发创建一个微秒的延迟,还需要找到 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
udelay()
应该是你要找的功能。
usleep()
是标准库中的函数,因此在内核 space 中不可用。您将不得不使用 linux 个计时器。有关详细信息,请参阅 the documentation。
我是 Linux 设备驱动程序的初学者。我正在尝试使用 Raspberry Pi 4B 实现超声波传感器 (HC-SR04) 的设备驱动程序,详细信息如下:
- OS : Raspberry Pi OS ( Raspbian GNU/Linux 10 克星 ) ( 版本 = 10 克星 )
- Linux 版本:Linux raspberrypi 5.10.20-v7l+ armv7l GNU/Linux
现在面临的问题是为传感器的触发创建一个微秒的延迟,还需要找到 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
udelay()
应该是你要找的功能。
usleep()
是标准库中的函数,因此在内核 space 中不可用。您将不得不使用 linux 个计时器。有关详细信息,请参阅 the documentation。