|
|
  |
вопрос по IAR, как замерить сколько тактов/команд выполняется та или иная функция |
|
|
|
Oct 23 2006, 09:36
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Михаил Горюнов @ Oct 23 2006, 10:10)  Если IAR умеет создавать объектный файл - то легко можно загрузить его в AVR отладчик, и посмотреть по счетчику выполненых команд. IAR, естественно, умеет создавать объектные файлы. В том числе такой, который понимает AVR Studio (UBROF8). Это если смотреть из симулятора. Иногда необходимо посмотреть время исполнения значительного объёма проги. Причём в динамике. И, например замерить максимальное значение времени исполнения какого-то куска. Я это делаю так. 1. Выделяю и инициализирую под это дело таймер. 2. Вначале данного куска вставляю ... uint16_t MaxT; // %%%% Для отладки TCNT5 = 0; // %%%% Для отладки ... 3. В конце данного куска вставляю ... __disable_interrupt(); MaxT = TCNT5; __enable_interrupt(); if(MaxTime<MaxT) MaxTime=MaxT; ... Это я взял из реальной проги. Если таймер запущен в режиме CLK/1, то вот тебе и такты.
|
|
|
|
|
Oct 23 2006, 17:55
|

Знающий
   
Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095

|
Цитата(Михаил Горюнов @ Oct 23 2006, 14:02)  Это все излишество... с таймером. В симуляторе AVR Studio 4 во время отладки в окне WorkSpace есть Группа Processor, так вот в этой группе есть такая замечательная весчь - Cycle Counter. Если взять ее значение в начале какого того фрагмента кода, и вычесть это значение из значения в конце фрагмента кода - то получишь количество циклов, которое данный фрагмент выполняется. С точностью до цикла :-) юзаем Breakpoints ИМХО не такое уж и излишество, если отлаживать через JTAG, то Cycle Counter неактивен и вариант с таймером, предложенный SasaVitebsk , нормальное решение...
|
|
|
|
|
Oct 23 2006, 20:42
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Old1 @ Oct 23 2006, 20:55)  ИМХО не такое уж и излишество, если отлаживать через JTAG, то Cycle Counter неактивен и вариант с таймером, предложенный SasaVitebsk , нормальное решение... Совершенно в дырочку.  Причём я же оговорился: "на больших отрезках проги". Иногда даже на моей машине и то никаких сил не хватит ждать результатов симулятора. А иногда это просто нельзя сделать по простой причине, - симулятор не эмулирует внешнего оборудования, тем более если оно сложное. Но чаще всего такое приходится делать на изделии где несколько прерываний разного уровня. И есть шанс повторного входа в прерывание. Можно конечно на ножку и осциллографом, как предложили, но это оценочный путь. Так можно проценты посмотреть или среднее значение, а моим я максимальное определяю на больших статистических данных.
|
|
|
|
|
Oct 24 2006, 05:37
|

nofb
  
Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218

|
Цитата(SasaVitebsk @ Oct 24 2006, 00:42)  Цитата(Old1 @ Oct 23 2006, 20:55)  ИМХО не такое уж и излишество, если отлаживать через JTAG, то Cycle Counter неактивен и вариант с таймером, предложенный SasaVitebsk , нормальное решение...
Причём я же оговорился: "на больших отрезках проги". Иногда даже на моей машине и то никаких сил не хватит ждать результатов симулятора. А иногда это просто нельзя сделать по простой причине, - симулятор не эмулирует внешнего оборудования, тем более если оно сложное. Но чаще всего такое приходится делать на изделии где несколько прерываний разного уровня. И есть шанс повторного входа в прерывание. Можно конечно на ножку и осциллографом, как предложили, но это оценочный путь. Так можно проценты посмотреть или среднее значение, а моим я максимальное определяю на больших статистических данных.  ну все зависит от поставленной задачи... исходных данных нет. Может у человека нет эмулятора, и отрезок кода у него оч. маленький, без вложенных прерываний .
--------------------
Это не то что вы подумали ...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|