Контролировать тактовые циклы для кода на arduino /AVR?

Возможно ли отслеживать блок кода и определять количество тактовых циклов процессора, которое приняло код на процессоре Arduino и /или AVR atmel? или, должен ли я лучше контролировать микросекунды, переданные до и после запуска кода? Примечание. Меня не интересует реальное время (как, сколько реальных секунд прошло) столько, сколько я нахожусь в «количестве тактовых циклов, которые этот код требует от CPU»

Текущее решение, которое я могу придумать, - от time.c:

#define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
#define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() )

wiring.c добавляет:

#define microsecondsToClockCycles(a) ( (a) * clockCyclesPerMicrosecond() )

К этому счету я мог рассчитать такты, прошедшие через микросекунду, прошедшие через микросекунды, и затем передать это микросекундамToClockCycles (). Мой вопрос в том, есть ли лучший способ?

sidenote: есть ли хорошие ресурсы для мониторинга производительности AVR. lmgtfy.com и различные поиски в форумах не дают никаких очевидных результатов, кроме исследования таймеров

спасибо

10 голосов | спросил cyphunk 26 42009vEurope/Moscow11bEurope/MoscowThu, 26 Nov 2009 13:56:40 +0300 2009, 13:56:40

3 ответа


6

Самый простой способ - заставить ваш код вытащить какой-нибудь пинч, прежде чем он выполнит код, который вы хотите использовать, и потяните его вниз после того, как он закончит делать что угодно. Затем сделайте цикл кода (или используйте цифровой осциллограф с памятью в режиме одиночного выстрела), а затем запустите его. Длительность импульса указывает вам, сколько времени потребовалось для выполнения куска кода плюс один такт, из-за изменения состояния вывода (я думаю, что требуется один цикл, а не на 100%).

ответил Dago 26 42009vEurope/Moscow11bEurope/MoscowThu, 26 Nov 2009 23:16:47 +0300 2009, 23:16:47
4

Что вы подразумеваете под «монитором»?

Не стоит считать тактовые циклы для AVR для небольших фрагментов кода сборки.

Вы также можете установить порт до того, как код будет выполнен, и затем сбросить его, и проверите это с помощью логического анализатора или осциллоскопа, чтобы получить время.

И вы также можете прочитать время по быстродействующему таймеру, как вы говорите.

ответил starblue 26 42009vEurope/Moscow11bEurope/MoscowThu, 26 Nov 2009 14:06:37 +0300 2009, 14:06:37
1

Так как каждая строка кода, добавленная в ваш источник, будет влиять на производительность и может повлиять на применяемые оптимизации. Изменения должны быть минимальными, необходимыми для выполнения задачи.

Я только что нашел плагин Atmel Studio под названием «Отладчик аннотированных файлов сборки». http://www.atmel.com/webdoc/aafdebugger/pr01.html Похоже, что вы переходите через собственно сгенерированный язык ассемблера, хотя, вероятно, утомительно покажет вам, что именно происходит. Вам все равно придется декодировать, сколько циклов требуется для каждой команды, но оно будет намного ближе, чем некоторые другие опубликованные варианты.

Для тех, кто не знает в выходной папке вашего проекта, находится файл с расширением LSS. Этот файл содержит весь исходный код в качестве комментариев, а под каждой строкой - язык ассемблера, который был сгенерирован на основе этой строки кода. Генерация LSS-файла может быть отключена, поэтому проверьте следующую настройку.

Свойства проекта | Инструментарий | AVR /GNU Общий | OutputFiles

Флажок ".lss (Создать файл lss)

ответил James 19 MarpmThu, 19 Mar 2015 21:52:20 +03002015-03-19T21:52:20+03:0009 2015, 21:52:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132