Vit (16.01.2016 09:49 - 14:57, просмотров: 157) ответил shides на Это очень интересно... Что вы под этим имели ввиду __ISB(); ?
Например, в случае последовательного неоднократного обращения к GPIO приходится вставлять после каждого обращения к порту. Иначе огребал не просто недетерминированное время переключения(хотя оно меня не сильно волновало), но и вааще невыполнение. Оно сбрасывает конвеер, что несколько замедляет.
Все пустые циклы сделал ассемблерными вставками (чтобы наверняка, компилятор проглатывает как есть). конечно хорошо, но это Cortex - там есть ещё внутренняя оптимизация где-то на уровне ядра+конвейера, которая компиляторами/ассемблерами простым "правильным написанием" не лечится:( Не зря же они эти самые барьеры наплодили. Например, при настройке ядра для сна так, чтобы после побудки из обработчика прерывания вваливаться обратно в сон, выборочно нужно таки переходить в "фон" - вот такая перенастройка ядра без __ISB() под конец обработчика прерывания не работала на CM0+ и CM3(3rd ed), независимо от имени компилятора