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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Отсчёт времени/тактов в симуляторах Keil и IAR, Какое-то сплошное враньё!?
rezident
сообщение Jul 18 2010, 11:11
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(WhiteFang @ Jul 18 2010, 16:54) *
А вот для ARM не могу найти
Потому, что у ARM имеется конвейер и учет тактов весьма трудная задача.
Go to the top of the page
 
+Quote Post
WhiteFang
сообщение Jul 18 2010, 11:22
Сообщение #17





Группа: Участник
Сообщений: 14
Регистрация: 16-04-09
Из: Томск
Пользователь №: 47 801



Цитата(rezident @ Jul 18 2010, 15:11) *
Потому, что у ARM имеется конвейер и учет тактов весьма трудная задача.


у TI С28x тоже имеется конвеер, но TI решила задачу весьма красиво. Видимо нужна соответствующая аппаратная реализация функции в JTAG.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Jul 18 2010, 11:34
Сообщение #18


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(WhiteFang @ Jul 18 2010, 13:54) *
В моём вопросе речь про штатные средства среды IAR для вычисления процессорных тактов.

А Вам обязательно "штатные средства среды IAR" использовать? Возьмите любой free-running таймер и наслаждайтесь. Например, для IAR 5.xx для LPC17xx можно сделать так:

CODE

#define hal_profiler_counter() (RIT_COUNTER)
#define hal_profiler_freq() (HAL_PMOD_CLOCK_RIT)

#if HAL_PROFILER
HAL_SYSTEM_CALL
VOID
HAL_CALL_OPTION
hal_profiler_init(
void)
{
DWORD lock;

lock = hal_lock_interrupt();
{
RIT_CTRL = 0;
RIT_COUNTER = 0;
RIT_MASK = 0;
RIT_COMPVAL = 0xFFFFFFFF;
NVIC_IDCR0 = (1<<IRQ_RIT);
RIT_CTRL = bRIT_EN;
CLK_PCONP |= bPCONP_PCRIT;
}
hal_unlock_interrupt(lock);
}
#endif


Измерение времени выполнения функции выглядеть будет так:
CODE

{
DWORD start, time;

hal_profiler_init();
start = hal_profiler_counter();
function_to_be_profiled();
time = hal_profiler_counter()-start;
//
// time - время выполнения функции в тактах таймера профайлера
//
}


Ну, можно еще подкорректировать на время исполнения самого кода hal_profiler_counter().
Тактовая частота таймера профайлера выбирается по желанию - взависимости от требуемой точности и диапазона измеряемых интервалов.
BTW, на большинстве распространенных ARM-процессоров типа LPC/SAM время исполнения кода с точностью до такта измерять часто бессмысленно - скорость исполнения определяется многими факторами - выравнивание кода во флеш, загрузкой шин операциями DMA, прерываниями.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 18 2010, 17:33
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Dimonira @ Jun 27 2007, 00:29) *
Мне нужна была дубовая функция задержки с параметром в миллисекундах. Чтобы "настроить" её, я запустил программу в симуляторе, через профайлер посмотрел сколько выполняется функция задержки и исходя из этого скорректировал вычисление нужного счётчика в функции.

Такой подход к реализации функций задержки имеет множество недостатков: зависимость величины задержки от уровня оптимизации, версии компилятора, настроек ускорителей памяти (если они есть), неточная симуляция. Чтобы не закладывать себе мину на будущее, лучше немного напрячься и сделать задержку с использованием аппаратного таймера.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 11:59
Рейтинг@Mail.ru


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