linux-kernel - RPi4:设备驱动程序 - 微秒延迟/计数
问题描述
我是 Linux 设备驱动程序的初学者。我正在尝试使用Raspberry Pi 4B实现超声波传感器(HC-SR04)的设备驱动程序,详细信息如下:
- 操作系统:Raspberry Pi OS(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( )
解决了 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()
是标准库中的一个函数,因此不能在内核空间中使用。您将不得不使用 linux 计时器。有关详细信息,请参阅文档。
推荐阅读
- mysql - 为什么 MYSQL Explain 显示的行数几乎是两倍
- python - 如何管理 ctypes 中的嵌套结构?
- r - 在运行循环时将预测导出到数据集
- vb.net - 如何清除 DataGridView 的标题?
- r - 如何查看或访问 R 中因子变量标签后面的值(级别)?
- r - 如何在 R 中运行截断和膨胀的泊松模型?
- java - 服务可以在 Spring Boot 中更新控制器以进行长进程吗
- sql - 子字符串前后的 Oracle 正则表达式 n 个字符,不包括空格
- flutter - 使用 MultipartRequest 通过 HTTP 上传多个图像/视频文件
- c - c中关于掩码的按位运算