Цитата(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 было так просто...
Методы которые работают всегда:
Простейший способ приблизительно измерить время -- установить пин в единицу на время работы функции и измерить осциллографом.
Более точно -- считать значение счетчика таймера в начале и в конце и посчитать разницу. Этот метод будет правильно работать для времен короче времени цикла счетчика. Но введением делителя перед счетчиком можно увеличить интервал, снизив разрешение.

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

Для этого можно использовать любой таймер. Обычно их много и настраиваются не так сложно, поэтому всегда можно один таймер использовать для отсчёта времени (или "тиков" когда нужно работать с временами порядка нано/микросекунд).
Ну а дальше всё просто: запоминаем в переменной текущее состояние таймера, запускаем функцию. После завершения разность между новым состоянием таймера и запомненным даёт искомое время.
Бывает используют таймеры для нескольки input capture/output compare, а такие таймеры свободно бегущие. Такой таймер можно использовать.
Цитата(kt368 @ Nov 3 2013, 16:41)

Хм...может это у меня было в симуляторе...
Нет, была просто другая версия
Сообщение отредактировал Tarbal - Nov 5 2013, 17:02