我有一个关于驱动程序上下文中的自旋锁和延迟的一般性问题。我有一个在 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/