Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Определение времени выполнения функции по симулятору IAR для STM32
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Schulz_K
Как определить сколько по времени выполняется фукция? Симулятор IAR в режиме Trace показывает 51 цикл. Значит ли это, что время выполнения этой функции =51/120МГц=0,425мкс ?
Подобный вопрос на форуме недавно обсуждался, но в моем случае такие отличия: расчет нужен приблизительный, чтобы оценить, справится ли вообще 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:

и соответственно, при выполнении условия, требует 5 циклов.
Schulz_K
Нашел возможность проверить на плате, результат такой: функция откомпилировалась в Raid размером 120 ассемблерных инструкций, на частоте 72 МГц ее время выполнения получилось 4,2мкс. Это примерно соответствует 35нс на инструкцию или 28,6МГц. Может, кто-то объяснит - почему так ? Литература нам говорит "ЦПУ Cortex способно выполнять большинство инструкций за один цикл".
Сергей Борщ
QUOTE (Schulz_K @ Aug 26 2011, 15:11) *
Литература нам говорит "ЦПУ Cortex способно выполнять большинство инструкций за один цикл".
Один цикл чего? И большинство, а не все. И настройки скорости флеша вы учитываете? И скорость доступа к шинам (не знаю, как с этим у кортексов, но возможные варианты)? Вот именно поэтому симулятор считает не время и не такты, а некие абстрактные "циклы".
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.