Подобный вопрос на форуме недавно обсуждался, но в моем случае такие отличия: расчет нужен приблизительный, чтобы оценить, справится ли вообще STM32 на 120МГц с заданной задачей. Поэтому платы на которой все можно проверить осциллографом никто покупать на будет до получения положительного ответа. Есть результат подсчета на симуляторе - нужно теперь правильно его понять.
Есть дизассемблированный код - можно увидеть, например, что в Trace IAR считал что команды типа ADD, STR, BNE.N выполняются по времени один цикл.
Программа выполняется из Flash. (Кстати, возникают вопросы - а как отличаеся время, если работать из RAM и как влияет конвейер ?)
(Утилита Clock Configuration говорит что Flash Wait State = 3 - это значит, что при работе из Flash полученное время нужно умножать на 3 по сравнению с RAM, или так можно считать только при выполнении условных переходов, или условные переходы тоже отрабатываются конвейером за 1 цикл ?)
DMA и вложенных прерываний нету.
Главный вопрос - хватит ли 1мкс для выполнения данной, критичной ко времени, функции на данном кристалле при данной частоте.
Раньше я с STM32 не работал, поэтому прошу особо не ругаться.
(На AVR данный вопрос для меня решается просто, хочу теперь разобраться как делать подобные оценки производительности на ARM и на STM32 в частности.)
Пример:
Код
if (command & 0x40000000) GPIOG->BSRRL = GPIO_Pin_6;
выполняется так:
Код
LSLS R3, R2, #1
BPL.N ??tm1_0
LDR.N R3, ??DataTable4_3
MOV.W R12, #64
STRH.W R12, [R3]
??tm1_0:
BPL.N ??tm1_0
LDR.N R3, ??DataTable4_3
MOV.W R12, #64
STRH.W R12, [R3]
??tm1_0:
и соответственно, при выполнении условия, требует 5 циклов.