linux - Linux 驱动程序上下文中的微秒延迟和自旋锁

标签 linux driver mutex spinlock

我有一个关于驱动程序上下文中的自旋锁和延迟的一般性问题。我有一个在 gpio 中读写的 Linux 驱动程序。读取和写入操作在单个引脚中完成,并且完全基于时序(HDQ 协议(protocol))。原始驱动程序是使用 udelay() 调用实现的,最坏情况约为 500 us。 驱动程序不会实现任何中断,只是使用常规 gpio_get_value()gpio_set_value() 在特定 GPIO 中进行常规读取和写入。 在这些延迟之间,驱动程序包含自旋锁。这有多安全?我有点担心自旋锁带来的这些延迟。

最佳答案

udelay 可以安全地用于原子部分(即在自旋锁或中断中)。看the kernel timers howto了解所有详情。

您可能担心性能问题,因为 udelay 处于忙等待状态。然而,当使用可调度 sleep 时,很难确定是否满足时间要求,因为它们不精确。在大多数 处理器上,usleep 应该足够准确,但不如udelay 确定。此外,调用 usleep 时无法保持自旋锁,因此必须使用不同的同步机制。

关于linux - Linux 驱动程序上下文中的微秒延迟和自旋锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39839464/

相关文章:

linux - 如何为一个存储库执行 git bisect 并转到最新版本导致问题的旧版本?

Linux:在用户已准备好输入名称的文本文件中搜索字符串

c++ - 长时间锁定互斥锁是否安全?

C - 多线程 WordCount 运行时崩溃 - 现在编译失败 : redefinition of struct timespec?

linux - 在 Linux 上用 perl fork 一个新进程

linux - 在 linux 下从串口读取时出现虚假传输(ttyUSB..)

windows - FILE_FLAG_NO_BUFFERING 如何与向通信设备打开的句柄交互?

ms-access - Microsoft Access 是否有 64 位驱动程序?

c - PsLookupProcessByProcessId 与 DWORD pid?参数1需要HANDLE?

c++ - 同时锁定两个互斥锁