我们试图在带有 Raspbian 的树莓派上使用软件 PWM 获得最佳结果。我们编写了一个在 GPIO 引脚上启动 PWM 的 Python 脚本,并使用示波器观察了结果。
效果并不好,延迟是不可接受的。
之后,我们将软件 PWM 进程的实时优先级设置为 99,并将调度更改为实时循环,然后更改为 fifo(1865 是进程 pid)。
sudo chrt -f -p 99 1865
sudo chrt -r -p 99 1865
它的行为与优先级更改之前相同。
全部其他进程以非实时优先级运行。然而,计时器和 USB 每秒发生大约 3000 次中断。
在这问题答案指出:
...普通内核处理实时优先级,这使它们比普通任务具有更高的优先级,并且这些任务通常会运行直到它们自愿让出 CPU
你知道为什么优先级的改变没有产生明显的效果吗?实时优先级是否会影响中断过程中发生的情况?
答案1
我没有产生明显的效果,因为该进程是在用户空间中运行的,并且它在用户空间中的其他进程的上下文中被赋予了实时优先级。
但是,内核空间仍然加载有中断,并且当其他进程获得其(少量)处理器时间份额时,它们可能会启动系统调用,从而迁移到内核空间,其中我们进程的实时优先级没有任何意义。
中断全部发生在内核空间,因此也不受实时优先级的影响。