Цитата(a1ien @ Apr 17 2012, 23:29)

Переход тоже гдето в 2 така выливается. Тоесть цикл записи в порт самый оптимизированный(а не тот что приведен выше) занимает около 6 тактов,соответственно 12 тактов запись патерна. Тоесть теоретически 6-7 мгц это максимум что можно получить при генерации меандра.
Это вы оптимист насчет перехода, 2 в идеальном случае.
Цитата
Branches take one cycle for instruction and then pipeline reload for target instruction. Non-taken branches are 1 cycle total.
Taken branches with an immediate are normally 1 cycle of pipeline reload (2 cycles total). Taken branches with register
operand are normally 2 cycles of pipeline reload (3 cycles total). Pipeline reload is longer when branching to unaligned 32-bit
instructions in addition to accesses to slower memory. A branch hint is emitted to the code bus that permits a slower system
to pre-load. This can reduce the branch target penalty for slower memory, but never less than shown here.
А если вспомнить про 2 такта ожидания при обращении к флеш на 72МГц для STM32F103, и небольшую глубину буфера предвыборки, то если память мне не изменяет, то и 5 тактов можно получить.
С оптимизацией тож не все так очевидно, какой код там самый оптимизированный. Из-за нюансов внутренней архитектуры легко получаются чудеса.
Цикл из двух записей в порт и перехода на 72МГц действительно по минимуму 6 тактов, т.е. генерация меандра 12МГц. Но можно получить и в 1.5 раза медленее на том же исходном коде.