这是一个学术问题(我不一定打算这样做),但我很好奇它是如何工作的。我正在考虑用户级软件(而不是硬件)解决方案。
我想产生 PWM 信号(假设为少量数字 GPIO 引脚,但超过 1 个)。我可能会编写一个创建 Pthread 的程序,然后在该线程中使用适当的 s 等在占空比上无限循环sleep()
以获得正确的比例。
这不会严重破坏 CPU 吗?我想频率会在 100 Hz 左右。我以前没有做过这样的事情,但我可以想象不断循环、上下文切换等对于多任务处理或 CPU 使用来说不是很好。
在这种情况下使用和多任务处理有关 CPU 的任何建议?FWIW 我正在考虑单核处理器。我感觉答案的范围从“这将使您的系统无法使用”到“所涉及的数字比对现代处理器产生影响的数量级要小几个数量级”!
假设 C,因为它似乎最合适。
编辑:假设机器上的 Linux 或其他一些通用 POSIX 操作系统可以访问硬件 GPIO 引脚。
编辑:我认为我将如何实现带睡眠的 PWM 是显而易见的。为免生疑问,如下所示:
while (TRUE)
{
// Set all channels high
for (int c = 0; x < NUM_CHANNELS)
{
set_gpio_pin(c, 1);
}
// Loop over units within duty cycle
for (int x = 0; x < DUTY_CYCLE_UNITS; x++)
{
// Set channels low when their number is up
for (int c = 0; x < NUM_CHANNELS)
{
if (x > CHANNELS[c])
{
set_gpio_pin(c, 0);
}
}
sleep(DUTY_CYCLE_UNIT);
}
}