ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
1072489 Топик полностью
il-2 (27.01.2021 07:17, просмотров: 500) ответил Adept на если побайтово-врукопашную, то да, а если DMA??? мы исходим из того, что он в памяти уже лежит и нужно найти наиболее быстрый/красивый алгоритм (накладные расходы на IO не учитываем. То, что его можно обрабатывать "на лету" понятно, но это будет по-любому не быстрее обработки уже находящегося в ОЗУ
А откуда этот массив взялся в ОЗУ? Сам появился? :-) DMA несколько усложняет дело, но задача не становится нерешаемой. Хотя вопрос задан про AVR, у которого DMA нет :-) Но не буду занудничать, а по существу: 

Если массив принимается извне через периферию (SPI/UART/ADC) и используется DMA, то можно:

- настроить адекватные временные интервалы (таймер). интервал выбирается исходя из скорости поступления данных и количеством (N) обрабатываемых байт(слов) за данный интервал.

- в обработчике прерывания таймера проверяем кол-во пришедших новых байт(слов) (с момента предыдущего вызова обработчика) и выполняется поиск максимума для новой порции данных.

- по окончании приема обрабатываем остаток данных.

Фсе. Максимум найден. Время поиска максимума для всего массива сократилось до времени поиска максимума для N байт(слов) - от момента окончания приема данных, ессно.

На STM32 подобный алгоритм реализуется достаточно легко.