У меня две функции:
оболочка() использует getchar () для получения пользовательского ввода
playLED () воспроизводит светодиодную анимацию
У меня в FreeRTOS запущены две задачи
xTaskCreate(
shell,
"shell",
512,
NULL,
1,
NULL);
xTaskCreate(
playLED,
"playLED",
512,
NULL,
15,
NULL );
vTaskStartScheduler();
Затем я заметил, что воспроизведение светодиодной анимации стало пошаговым, оно меняется только тогда, когда getchar () получает ввод от пользователя, а не плавную анимацию.
Я уже установил приоритет светодиода намного выше, но остановку это не исправило. Есть ли что-нибудь еще, что я должен где-то настроить?
Код выполняется на плате NXP LPC54018 с MCUXpresso. Аналогичную проблему на другом устройстве можно найти на https://os.mbed.com/questions/781/Skip-getchar-if-no-input-using-interrupt/
Спасибо за ответ. Я использую его с MCUxpresso на NXP LPC 54018
Getchar () вообще отключает прерывания при получении ввода? В этом случае планировщик FreeRTOS не сможет запустить задачу с высоким приоритетом.
Спасибо за ответ. Это то, что я подозреваю, но не знаю, как это исправить. Я ожидал, что прерывание должно быть изолировано только от этой задачи, но каким-то образом оно повлияет на все.
Я думаю, что vTaskDelay (1) в начале задачи с getChar решит проблему.
Также вы можете изменить порядок создания задач, это тоже может помочь.
Можете ли вы лучше описать свою среду (ЦП, библиотеки, микроконтроллер, набор инструментов)?
getchar()
не входит в состав FreeRTOS. Таким образом, можно давать только ответы, относящиеся к вашей среде.