Спасибо за наводку с UART idle, пожалуй это самый оптимальный способ получения данных при заранее не известной длины сообщения. Построил приём в цикличном режиме dma, работает идеально?
Здесь происходить сброс флага чтением регистров DR и RXNE перед включением запроса DMA. Этот кусок кода я взял из библиотеки HAL, когда изучал как она устроена.
Да, можно и так, как бы если использовать volatile для структуры, действие спецификатора будет распространяться на все содержимое структуры (нам это и нужно). Если этого не нужно, то можно применить спецификатор volatile к отдельным элементам структуры.
С битовыми полями на одну операцию 4 инструкции + если операции производить по очереди, в данном случае 4 то 4*4 = 16 инструкций. Что гораздо медленнее.
Keenetic Hopper SE арт. KN-3812
Keenetic Hopper арт. KN-3811
Вот новые мощные модели на arm с USB3. Vless работает на 500мб точно.
Спасибо за наводку с UART idle, пожалуй это самый оптимальный способ получения данных при заранее не известной длины сообщения. Построил приём в цикличном режиме dma, работает идеально?
Случайно отклонил комментарий по поводу:
Здесь происходить сброс флага чтением регистров DR и RXNE перед включением запроса DMA. Этот кусок кода я взял из библиотеки HAL, когда изучал как она устроена.
А какие регистры в STM32 не имеют 32 бита?
Да, можно и так, как бы если использовать volatile для структуры, действие спецификатора будет распространяться на все содержимое структуры (нам это и нужно). Если этого не нужно, то можно применить спецификатор volatile к отдельным элементам структуры.
Спасибо, действительно ошибся со сбросом флага.
Ваш вариант конечно выполниться гораздо быстрее, всего 3 инструкции.
С битовыми полями на одну операцию 4 инструкции + если операции производить по очереди, в данном случае 4 то 4*4 = 16 инструкций. Что гораздо медленнее.
Согласен, я дополню статью с исходниками.
В CMSIS всё это есть, но не в том виде как это представлено в статье.
Видимо чтоб цикл for не завис в бесконечности при не штатной ситуации.