Это академический вопрос (я не обязательно планирую это делать), но мне любопытно, как это будет работать.Я думаю о программном решении для пользователя (а не в аппаратном обеспечении).
Я хочу производить ШИМ-сигналы (скажем, для небольшого числа цифровых выводов GPIO, но более 1).Я, вероятно, написал бы программу, которая создавала бы Pthread и затем бесконечно зацикливалась по рабочему циклу с соответствующими sleep()
s и т. Д. В этом потоке, чтобы получить правильные пропорции.
Не будет ли это ужасно загромождать процессор?Я предполагаю, что частота будет где-то около отметки 100 Гц.Я не делал ничего подобного раньше, но могу представить, что постоянное зацикливание, переключение контекста и т. Д. Не подходит для многозадачности или использования ЦП.
Какой-нибудь совет по использованию ЦП в этом случае и многозадачности?Я думаю о одноядерном процессоре.Я чувствую, что ответы могут варьироваться от ', что сделает вашу систему непригодной для использования' до ', число участвующих на несколько порядков меньше, чем окажет влияние на современный процессор' !
Предположим, C, потому что это кажется наиболее подходящим.
РЕДАКТИРОВАТЬ: Предположим, что Linux или другая операционная система общего назначения POSIX на компьютере с доступом к аппаратным выводам GPIO.
РЕДАКТИРОВАТЬ: я предполагал, что будет очевидно, как я буду реализовывать ШИМ в спящем режиме,Во избежание сомнений, что-то вроде этого:
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);
}
}