【问题标题】:Are GPIO APIs in linux deterministic in time taken?linux中的GPIO API在时间上是确定性的吗?
【发布时间】:2012-09-29 21:20:08
【问题描述】:

我需要在我的驱动程序中调用gpio_get_valuegpio_set_valuegpio_direction_input/output,并且有一个时间要求,要求函数调用在小于5us 的时间内返回。

gpiolib 可以满足这个要求还是不是确定性的?如果没有,有什么解决办法?直接访问GPIO寄存器?

非常感谢。

【问题讨论】:

  • 您是否尝试在您的设备上调用 gpio_xxx() API 并分析所用时间?结果是否足够确定?...

标签: linux linux-kernel linux-device-driver gpio


【解决方案1】:

调用其中一个函数涉及执行 linux 内核函数,因此至少有两个上下文切换:一个运行内核代码,一个返回用户空间。

这些开关可能意味着如果中断或信号进入执行,可能会浪费一些时间。

无论如何,如果您需要确定的时间期限,您需要切换到实时修补内核Real Time linux wiki homepage

我不知道 5us 是否可行,这取决于系统负载、活动驱动程序(例如,有读/写文件系统?),但您可以测试。

【讨论】:

  • 是的,但是如果要求只是操作序列在开始后的一定时间内完成(但开始的延迟并不重要),那么立即执行所有三个操作在不可抢占的上下文中来自内核内部的序列可能就足够了。但如果需要操作的实际时间,则可能需要实时扩展。
  • 我同意你的看法@ChrisStratton。问题是列出的三个函数是用于与 gpios 接口以设置/获取值和获取有关引脚配置的信息的三个函数,所以我认为它们会在不同的时刻被调用,而不是直接顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 2012-05-13
  • 2016-10-20
  • 1970-01-01
相关资源
最近更新 更多