Comments 7
Очень бодро.
А с какой периферией это тестировалось? Гоняли ли именно этот код, из поста, в реальных условиях, долгосрочно?
Вот по STM32 не хватает мануалов подобно этому. Спасибо!
Извините, но статья похожа на сокращенный вариант вот этого туториала, там и примеры под разные платы. Мне кажется, что rtos тут немного лишняя, тяжёлая уж больно. Очереди я бы заменил на кольцевые буферы, например, реализация в LUFA позволяет одновременную запись и чтение, а обрабатывал принятое в бесконечном цикле через КА или фланговый автомат
Кстати, не подскажете, как можно реализовать на half без all или прямого обращения к регистрам? Не пойму, как разрешать прерывание по idle
Есть мнение что предложенное решение в статье далеко от оптимального.
функции osMessageQueuePut
и osMessageQueueGet
копируют данные из очереди в локальную память, а это копирование явно лишнее и очень расточительно по отношению к памяти. на вашем месте я бы воспользовался Memory Pool и передавал между тасками через очереди только указатели на области памяти, избегая копирования всего сообщения.
Блин опять этот богомерзкий куб
Не в обиду автору, но учится надо без этих библиотек, даже при условии что LL гораздо лучше сделан чем HAL и SPL, кучу нижнего белья пропускаете
Тем более выкинуть их суперулиту при обучении, в программировании она как ни странно пригождается быстро и без ошибок настроить тот же freertos
Спасибо за наводку с UART idle, пожалуй это самый оптимальный способ получения данных при заранее не известной длины сообщения. Построил приём в цикличном режиме dma, работает идеально👍
Отправка и прием данных неизвестной длины по UART через DMA в freeRTOS на STM32 с использованием LL