gpt4 book ai didi

c++ - 如何限制 Linux 采取行动的时间?

转载 作者:IT王子 更新时间:2023-10-29 00:38:11 26 4
gpt4 key购买 nike

问题可能看起来很模糊,因为很难用一行来描述一个问题,所以就这样吧。我在 Raspberry Pi 上使用 Debian 来运行 PID 调节器,这意味着每次计算 PID 输出时都会获得 dt(循环执行之间的时间差)。基本上dt是这样计算的。

    oldtime_ = time_;
clock_gettime(CLOCK_MONOTONIC, &time_);
Timer.dt = ((static_cast<int64_t>(time_.tv_sec) * 1000000000 + static_cast<int64_t>(time_.tv_nsec)) - (static_cast<int64_t>(oldtime_.tv_sec) * 1000000000 + static_cast<int64_t>(oldtime_.tv_nsec))) / 1000000000.0;

PID 每秒更新大约 400 次并且一切正常,但有时 Linux 决定花费更多时间来执行操作。结果是大量的 dt,比方说,不是 1/400 = 0.0025,而是 0.8,比需要的多 320 倍。结果是 PID 计算错误。看起来像这样。 enter image description here

我很想知道如何让 raspbian 更接近实时系统。

编辑

谢谢 anaken78 和任何帮助过的人。使用 RR_FIFO 调度非常有效,处理速度始终在 380-400hz 左右。 enter image description here

最佳答案

我假设您使用的是原始的 Raspberry pi 而不是 Raspberry pi 2。原始 Raspberry pi 的问题是它使用单核 ARM11 cpu,这实际上意味着任何类型的 RT 计算(您正在做的方式) ) 必然会因为硬件中断而出错。例如,来自 Wifi 的数据包可能会中断您的系统,这将导致问题。

如果您不介意没有网络连接,您可以尝试的一种方法是提高您的进程优先级并关闭您的 wifi 和 eth 接口(interface)。我想说,这些是异步中断的主要来源,它们最终可能会中断您的流程执行。还会有其他中断不断触发,您可以查看/proc/interrupts 和/proc/softirq 以了解中断触发,但在像 raspberry pi 这样的平台上,它们应该是 priodic(定时器)或者它们将非常短暂的(例如 USB 中断)不应该导致您的过程延迟,大约几毫秒。

关于c++ - 如何限制 Linux 采取行动的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29061824/

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