Приоритет Freertos
Я пытаюсь реализовать FreeRTOS с 3 задачами.
- написать по адресу х
- читать записанные данные с адреса х
- мигать светодиодом
Без задачи 3 я реализовал задачи чтения и записи самостоятельно, назначив более высокий приоритет для задачи чтения, и она работает хорошо. Но когда я назначаю светодиодную задачу (задача 3) с наименьшим приоритетом, мой светодиод мигает, а задачи записи и чтения не работают должным образом.
Кто-нибудь может объяснить причину этого?
Кроме того, я хотел бы выполнять задачи записи-чтения параллельно с заданием led (с тем же приоритетом).
Пожалуйста, помогите мне осуществить это.
3 ответа
Предоставленная вами информация очень мала и неполна, поэтому могут возникнуть многочисленные проблемы. Я изучаю FreeRTOS, поэтому я не эксперт. На мой взгляд, я чувствую, что данные по адресу x становятся поврежденными (из-за упреждения задач), поэтому задачи записи и чтения не работают должным образом. Вам необходимо реализовать Mutex или двоичный семафор для взаимного исключения адреса x.
ПРИМЕЧАНИЕ: в freeRTOS нет такого понятия, как параллельное выполнение.
Попробуйте дать одинаковый приоритет всем трем задачам с взаимным исключением
Вам необходимо предоставить больше информации.
Во-первых, для задач 1 и 2 вам необходимо использовать мьютекс для разделения ресурсов между задачами. FreeRTOS Mutexes
Поскольку Задача 2 зависит от Задачи 1, вы можете установить для них одинаковый приоритет и сделать так, чтобы Задача 1 помечала Задачу 2, когда она будет выполнена. Задача 2 может бесконечно ждать, пока не будет установлен флаг из Задачи 1.
Что касается задачи 3, светодиод работает с интервалом? Или это тоже зависит от Задачи 1 или 2? Обычно вы можете установить для светодиода более низкий приоритет, и, поскольку он имеет больше времени во время включения и выключения, задачи 1 и 2 не должны быть затронуты.
Может быть, вы задерживаете светодиод, используя аппаратные задержки, а не задержки задач? Это может повлиять на производительность.