Есть ли у вас круговой планировщик? Ваши задачи спят какое-то время или просто уступают (или заняты ожиданием)?
Очень распространенная ошибка во встроенных ОС состоит в том, что планировщик часто не пытается планировать несколько процессов с одинаковым приоритетом. То есть, как только A уступает, если A является работоспособным, A может быть снова сразу запланирован, даже если у B не было процессоров целую вечность. Это очень нелогично, если вы привыкли к настольным операционным системам, которые прилагают много усилий, чтобы сделать честное планирование (или, по крайней мере, это было для меня).
Если вы столкнулись с этим, вам нужно убедиться, что ваши задачи выглядят так:
for (;;)
{
led(on); sleep(delay);
led(off); sleep(delay);
}
... чтобы гарантировать, что задача фактически перестает выполняться между миганиями. Это не сработает, если будет выглядеть так:
for (;;)
{
led(on);
led(off);
}
(Кроме того, как правило, вы хотите использовать обычный приоритет, а не высокий приоритет, если только вы не уверены, что он вам действительно нужен - если вы не справитесь с системной задачей, система может вести себя странно или аварийно.)