Имеется хост устройство стороннего производителя. И мой девайс.
Между собой они соединяются через UART.
Хост устройство имеет дисплей, клавиатуру, динамик, микрофон.
Через UART я принимаю сообщения о нажатии клавиш, в ответ могу вывести что-то на дисплей и выполнить другие действия с хостом.
Также через тот-же UART ходит звук по RTP.
Протокол на UART с установкой соединения. У каждого пакета порядковый номер.
На каждый пакет надо давать подтверждение с задержкой не более 300мс, иначе соединение будет разорвано.
Хост кроме подтверждения еще и дает пакет о статусе выполнения команды. Статус выполенния команды может быть выдан через несколько сотен миллисекунд.
Сейчас реализовано взаимодействие но без приема/передачи звука.
UART в моем девайса работает по DMA и на прием и на передачу.
Контроллер STM32 после обнаружения IDLE на UART Rx кидает сообщение в очередь в задачу обработчик.
Работа с хостом реализована в одной задаче.
Она кидает пакеты на хост, ждет ответ проверяет его и выдает подтверждение.
В такой вариант очень плохо ложится добавление RTP. Хочется его вынести отдельно и назначить этой задаче более высокий приоритет. По заголовкам пакетов можно однозначно определить это RTP или другие пакеты.
Может быть кто-то делал что-то подобное.
Как лучше сделать?
1. Оставить одну задачу для работы с хостом
2. Две задачи. Одна обрабатывает UART только на прием, вторая только на передачу.
Плюс тут в том что задача приема будет формировать подтверждения.
3. Сделать отдельную задачу для RTP и отдельную для работы с кнопками дисплеем.