ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
17 августа
1430883 Топик полностью
Nikolay_Po (28.04.2024 22:26, просмотров: 95) ответил RxTx на В старых STM32 UART примитивный и в отличии даже от древних dsPIC30 начала 2000х не имеет FIFO буфера. Что приводит к тому что прерывания будут дубасить на каждый байт. Тогда даже медленный по нынышним временам 115200 это 115200/10 ( к 8 битам байта еще 1 стартовый и 1 стоповый бит) = 11 520 = 11,5 килогерц. И это только один канал.
У меня на 72МГц, один 500кбит-поток, ~50% заполнения, по приёму на прерываниях без DMA разбирается, 19200 ещё поток, так же, только пониже приоритетом. CAN2.0 на мегабите с циклом обмена 5мс. 

Настроил весь обмен только на прерываниях, разными приоритетами. Прикладной программист и не знает, как оно работает. Когда удобно - берет данные, когда надо - кладёт. А дальше оно само.

Данные реального времени - в кадрах, менее требовательные ко времени данные - в пакетах, разбитых на те же кадры одного и того же интерфейса. Всё работает, аж приятно!

Разумеется, проверил нагрузку по ногодрыгу, осциллографом. За цикл прикладной программы, загрузка ЦП обработкой интерфейсов, не превышает 85%. Прикладному коду оставшегося хватает с лихвой.


P.S. оптимизация -O3, -flto

Без LTO было бы не так быстро, пришлось бы сделать циклы по длиннее.