Задача с более низким приоритетом с помощью getchar () останавливает задачу с более высоким приоритетом во FreeRTOS - как это исправить?

У меня две функции:

оболочка() использует 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/

Можете ли вы лучше описать свою среду (ЦП, библиотеки, микроконтроллер, набор инструментов)? getchar() не входит в состав FreeRTOS. Таким образом, можно давать только ответы, относящиеся к вашей среде.

Codo 27.10.2018 11:17

Спасибо за ответ. Я использую его с MCUxpresso на NXP LPC 54018

Suicide Bunny 29.10.2018 18:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
177
2

Ответы 2

Getchar () вообще отключает прерывания при получении ввода? В этом случае планировщик FreeRTOS не сможет запустить задачу с высоким приоритетом.

Спасибо за ответ. Это то, что я подозреваю, но не знаю, как это исправить. Я ожидал, что прерывание должно быть изолировано только от этой задачи, но каким-то образом оно повлияет на все.

Suicide Bunny 29.10.2018 18:58

Я думаю, что vTaskDelay (1) в начале задачи с getChar решит проблему.

Также вы можете изменить порядок создания задач, это тоже может помочь.

Другие вопросы по теме