gpt4 book ai didi

linux - 获得更多确定性(短) sleep

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:56 27 4
gpt4 key购买 nike

作为一个学生项目,我们正在构建一个机器人,它应该跑完规定的路线并捡起一个木制立方体。它的核心是一台运行 debian 的单板计算机,配备 ARM9,频率为 250MHz。因此 Controller 的处理能力绰绰有余。此外,它还会进行一些图像处理(不在行驶时,仅在 parking 时进行),这就是我们不使用没有操作系统的简单微 Controller 的原因。

目前整体运行良好,但存在一个问题:主控循环执行无任何延迟,循环频率超过1kHz。这绰绰有余,100Hz 也足够了。但是时不时地,有一个周期需要100ms甚至更长的时间,这可能会极大地干扰 Controller 。

我怀疑还有一些其他任务导致了这种延迟,因为调度程序可能会检测到它们在很长一段时间内没有任何 CPU 时间。

所以我最想要的是以下内容:在 Controller 的主循环中可能有 5 毫秒的短暂休眠,这实际上只需要 5 毫秒,但会为系统的其余部分提供一些处理器时间。我可以包括例如延迟500us 使用 nanosleep,但这总是需要超过 10ms 的执行时间,所以它不是真正的替代方案。我更喜欢自愿 sleep 之类的东西,让等待任务有机会做某事,但会尽快返回。

否则系统会卸载,所以没有什么真正需要长时间大量处理的。

有没有办法在用户空间中做到这一点,即不必坚持使用 RTAI 之类的东西?

谢谢,菲利普

最佳答案

我建议您在进行电机控制时坚持使用实时接口(interface);我曾在演示期间看到一辆 1000 公斤重的卡车撞到墙上,因为操作系统决定暂时考虑其他事情......:-)

如果你想远离 RTAI(但你不应该);一个(也许)快速解决方案是为实际驱动安装一 block Arduino 板,并保留 linux 板用于高级处理。

要解决“墙问题”,请在驱动板上安装看门狗,如果有一段时间没有命令到达,它会停止运行...

关于linux - 获得更多确定性(短) sleep ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10732483/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com