Цитата(Golikov A. @ Feb 7 2015, 18:38)

даже без сравнений это не менее 2000*6 действий, а добавив туда еще сравнения и какие-то переходы, да тот же инкремент цикла и уже получаются миллисекунды. Если будет больше 2 мСек, то легче на эти 2 мСек полингом сигналы долбить и по таймеру отмечать конец и старт, разрешение будет даже повыше
Во-первых: Зачем 2000? Вы же сами написали что минимальная длина импульса 1мс и старты импульсов близки друг к другу. Так что - достаточно пройтись немного от начала полученного массива и до 1000 отсчётов от конца.
Во-вторых: Откуда 6? Если уж спускаться до ассемблера, то в базовом варианте, без оптимизации, со всеми переходами и счётчиком цикла получается 7 команд (если GPIO STM32 имеет функцию маскирования при чтении как в LPC, то на команду меньше).
Далее - исходя из Вашего условия, что кол-во сигналов много меньше кол-ва сэмплов в массиве, и сигналов <=8, можно провести оптимизацию алгоритма и получить в пределе до 3.5 команд на каждые 4 сэмпла (с маскированием в GPIO еще на 1 команду меньше). Это я учёл только основной цикл поиска. Ответвления от цикла при обнаружении изменения сигнала и счётчик цикла я не учёл, но они дадут небольшую прибавку если учесть вышеизложенные условия.
Так что в целом, на проход 1000 сэмплов понадобится ~1000 тактов, что при 72МГц всего неск. мксек.
Может что-то я не учёл, но порядок примерно такой.
ЗЫ: Конечно на DSP этот поиск просто шикарно ложится, но увы - у Вас всего лишь Cortex.

Цитата(smk @ Feb 7 2015, 18:50)

Только видать в две страницы писать прийдется. Пока одна пишется вторая обрабатывается. Процесс такой обработки страницы это на 72 МГц что-то около 1,5-2 мС.
ТС же указал в условии, что измерять надо только во время импульсов, между импульсами - большие паузы. И я предложил запускать DMA от логического ИЛИ всех сигналов, полученного внешней логикой. Если её нет, то да - придётся делать непрерывное чтение.
Цитата(smk @ Feb 7 2015, 18:50)

Я так понимаю нужно заряжать память-память и пинать по таймеру с нужным временным разрешением.
Нужно читать GPIO->ОЗУ, а синхронизацию (события для DMA) брать от таймера. Думаю - STM32 это должен уметь.