如何解决RPi4:设备驱动程序 - 微秒延迟/计数
我是 Linux 设备驱动程序的初学者。我正在尝试使用 Raspberry Pi 4B 为超声波传感器 (HC-SR04) 实现设备驱动程序,并提供以下详细信息:
- 操作系统:Raspberry Pi 操作系统(Raspbian GNU/Linux 10 buster)(版本 = 10 buster)
- Linux 版本:Linux raspberrypi 5.10.20-v7l+ armv7l GNU/Linux
现在面临的问题是为传感器的触发创建微秒延迟,还需要找到 ECHO 信号的持续时间(以微秒为单位)。我尝试了 usleep() 但它给了我隐含的错误,即使在尝试其他论坛中解释的方法(如添加 #define _BSD_SOURCE)后我也无法解决。在搜索时发现 jiffies 无法提供微秒精度。 clock() 函数或 sched_clock() 都不断出错。
如果你们中的任何人能建议我一种在设备驱动程序中实现微秒延迟和计数的方法,那将非常有帮助。
提前致谢。
[已解决]
udelay( )
解决了标头 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()
是标准库中的一个函数,因此不能在内核空间中使用。您将不得不使用 linux 计时器。有关详细信息,请参阅 the documentation。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。