реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Измерение времени выполнения функции Keil J-Link, как измерить?
kt368
сообщение Nov 3 2013, 10:44
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Здравствуйте!
Нужно измерить время выполнения функции на реальном железе, использую Keil + J-Link. Для этого поставил breackpoint на строку вызова функции и на следующую строку. При попытке посмотреть время выполнения программы от одного breackpoint'a до другого, значение Stop Watch почему-то не меняется, хотя, если программа крутится в бесконечном цикле, то время идёт, проверял по часам - довольно точно. Также вычитал тут про возможность применения "Debug->Execution Profiling->Time", но, как вычитал на сайте Keil'a, эта функция при дебаге работает только "with ETM Instruction Trace", а в моем отладчике возможность ETM Trace отсутствует.
Как можно померить время выполнения функции? В MPLAB IDE было так просто...
Go to the top of the page
 
+Quote Post
Herz
сообщение Nov 3 2013, 12:01
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



А как в MPLAB IDE? Никогда не пользовался. А, Stop Watch...
Если отладка идёт на реальном железе, то нельзя ли какой-нибудь пин порта временно использовать? Обычно всегда можно найти свободный в данный момент.
Go to the top of the page
 
+Quote Post
kt368
сообщение Nov 3 2013, 12:26
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Пин то найти можно легко, только осциллографа под рукой нет, хотелось бы как-то без него.
Go to the top of the page
 
+Quote Post
Herz
сообщение Nov 3 2013, 12:38
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Кстати, я у себя в MPLAB StopWatch почему-то не нахожу...

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
kt368
сообщение Nov 3 2013, 12:41
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Хм...может это у меня было в симуляторе... Ладно, буду пользоваться выводом сигнала на пин и осциллографом.
Go to the top of the page
 
+Quote Post
Falkon_99
сообщение Nov 4 2013, 10:52
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 26-03-12
Из: Харьков
Пользователь №: 71 010



какой контроллер? если STM32, то в нем есть регистр который считает такты ядра, зная частоту можно определить время. регистр вроде называется DWT_CYCCNT
Go to the top of the page
 
+Quote Post
Ixt
сообщение Nov 5 2013, 07:44
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 27-10-06
Из: Брянск
Пользователь №: 21 724



Цитата
Измерение времени выполнения функции


Для этого можно использовать любой таймер. Обычно их много и настраиваются не так сложно, поэтому всегда можно один таймер использовать для отсчёта времени (или "тиков" когда нужно работать с временами порядка нано/микросекунд).
Ну а дальше всё просто: запоминаем в переменной текущее состояние таймера, запускаем функцию. После завершения разность между новым состоянием таймера и запомненным даёт искомое время.

Сообщение отредактировал Herz - Nov 5 2013, 16:55
Причина редактирования: Оформление цитаты
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 5 2013, 16:35
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Herz @ Nov 3 2013, 16:38) *
Кстати, я у себя в MPLAB StopWatch почему-то не нахожу...


Как в 95 начал с MPLABом работать так одни и те же проблемы. Баги редактора и StopWatch убирают через версию. В одной версии есть в следующей нет. Я уже у Микрочипа про StopWatch спрашивал. Ничего внятного они не смогли сказать.

Сообщение отредактировал Tarbal - Nov 5 2013, 16:35
Go to the top of the page
 
+Quote Post
kt368
сообщение Nov 5 2013, 16:36
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Контроллер LPC1758, пока измеряю время с помощью осциллографа. Про таймер спасибо, буду иметь в виду такой вариант.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 5 2013, 16:59
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(kt368 @ Nov 3 2013, 14:44) *
Здравствуйте!
Нужно измерить время выполнения функции на реальном железе, использую Keil + J-Link. Для этого поставил breackpoint на строку вызова функции и на следующую строку. При попытке посмотреть время выполнения программы от одного breackpoint'a до другого, значение Stop Watch почему-то не меняется, хотя, если программа крутится в бесконечном цикле, то время идёт, проверял по часам - довольно точно. Также вычитал тут про возможность применения "Debug->Execution Profiling->Time", но, как вычитал на сайте Keil'a, эта функция при дебаге работает только "with ETM Instruction Trace", а в моем отладчике возможность ETM Trace отсутствует.
Как можно померить время выполнения функции? В MPLAB IDE было так просто...


Методы которые работают всегда:

Простейший способ приблизительно измерить время -- установить пин в единицу на время работы функции и измерить осциллографом.

Более точно -- считать значение счетчика таймера в начале и в конце и посчитать разницу. Этот метод будет правильно работать для времен короче времени цикла счетчика. Но введением делителя перед счетчиком можно увеличить интервал, снизив разрешение.


sm.gif Почитал ответы. Обнаружил, что опоздал.

Ну тогда в качестве бонуса еще один вариант. Более сложный, но несравненно мощнее. Проверьте есть ли трасировка и работает ли она. Трасировшик это очень мощный инструмент. Вы можете записывать разные события в процессе выполнения программы. Для измерения времени исполнения функции заведите глобальную переменную и производите запись в нее перед вызовом и после вызова функции. Настройте трассировщик на запись всех событий записи в эту переменную. После исполнения программы просмотрите выход трассировки. Там времена и/или циклы процессора должны быть.


Цитата(Ixt @ Nov 5 2013, 11:44) *
Для этого можно использовать любой таймер. Обычно их много и настраиваются не так сложно, поэтому всегда можно один таймер использовать для отсчёта времени (или "тиков" когда нужно работать с временами порядка нано/микросекунд).
Ну а дальше всё просто: запоминаем в переменной текущее состояние таймера, запускаем функцию. После завершения разность между новым состоянием таймера и запомненным даёт искомое время.


Бывает используют таймеры для нескольки input capture/output compare, а такие таймеры свободно бегущие. Такой таймер можно использовать.

Цитата(kt368 @ Nov 3 2013, 16:41) *
Хм...может это у меня было в симуляторе...


Нет, была просто другая версия sm.gif

Сообщение отредактировал Tarbal - Nov 5 2013, 17:02
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 07:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016