|
Отсчёт времени/тактов в симуляторах Keil и IAR, Какое-то сплошное враньё!? |
|
|
|
Jun 26 2007, 20:29
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Контроллер ADuC7024. Делал сначала софт в IAR 4.41. Мне нужна была дубовая функция задержки с параметром в миллисекундах. Чтобы "настроить" её, я запустил программу в симуляторе, через профайлер посмотрел сколько выполняется функция задержки и исходя из этого скорректировал вычисление нужного счётчика в функции. Но в реальности мне показалось, что задержки выполняются дольше рассчитанного времени. На глаз показалось, что на треть. Получилось, что симулятор IAR врёт в более быструю сторону.
Потом решил код частично отладить в Keil mdk 3.10, т.к. там удобнее (чем в IAR) в симуляторе смотреть такты и время выполнения отдельных строчек кода. Начал как раз с функции задержки, т.к. она простая. И тут выяснилось, что та же функция выполняется (по симулятору) вдвое дольше. Количество тактов и время выполнения в симуляторе соответствуют друг другу (проверил на всякий). Решил посмотреть на реальном выполнении. В результате задержка, которая в симуляторе была 20с (по тактам и счётчику времени), реально выполнялась где-то за 14.3с. Получается, что симулятор насчитывает больше тактов, чем проходит в реальности. Подобрал расчёт счётчика в функции задержки по реальному выполнению. Теперь задержка в 10с в симуляторе проходит за 14.3с. Получилось, что пришлось уменьшить значение счётчика примерно на столько, на сколько мне казалось медленнее работает задержка в реальном выполнении в IAR.
Короче, в итоге, реальная задержка выполняется одинаково, что после Keil, что после IAR. А вот симуляторы врут, причём в разные стороны и довольно прилично.
В чём тут трабл? Или изначально ориентироваться на временные отсчёты в симуляторах не стоило?
Просто мне бы надо отработать/отладить "трудоёмкий" код, где вычисления с плавающей точкой и хотелось бы иметь достаточно правдивый "инструмент" замера тактов/времени.
|
|
|
|
|
Jun 27 2007, 19:03
|

Гуру
     
Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553

|
Цитата Тем более, что эти продукты (Keil и IAR) стоят немеряно денег! Небольшая выдержка о достаточно навороченном(скажем средне навороченном) симуляторе с поддержкой ARM7T:"Pricing for Miss Univers time-based licenses (TBLs) starts at $25,000 per year." Посмотрите на продукты типа CVE, решения от Coware, и у ARM, наверняка, есть решение по верификации железо-софт. Только вот прайсы на них соответствующие классу(сложности) решаемых задач. Цитата Если бы у меня так работало то что я делаю, меня бы уже давно с работы выперли... Симулятор не симулирует? То, что идет в Keil, по моему скромному мнению, всего-навсего ISA(instruction set accurate) - уровень достаточный для отладки БОЛЬШИНСТВА программ.
|
|
|
|
|
Jun 27 2007, 22:07
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Dimonira @ Jun 27 2007, 21:32)  Уж этому АРМу столько времени, что можно было бы за это время что-то приличное сделать. Вам rezident уже намекал, что время исполнения инструкции у ARM в отличие от AVR, PIC и т.д. зависит не только от тактовой частоты, а и от реализации различных ускорителей чтения из флеш, делителей шин, области памяти (RAM/ROM/EXT RAM/EXT ROM/периферия) и кучи связанных с этим настроек, которые у каждого процессора свои. В ARM9 и выше еще прибавьте кеш-память и всякие навороты вроде предсказателя переходов. Учесть все эти зависимости при симуляции - малореально, по сложности сопоставимо с созданием самого кристалла. А еще производители пекут новые кристаллы чем дальше тем быстрее. Так что вместо огрызаний лучше последуйте упомянутому совету. Симулятор честно показывает количество циклов ядра согласно спецификации ARM на ядро (кстати, растактовки команд у ARM7TDMI и ARM7TDMI-S отличаются), и не его вина, что циклы ядра и такты генератора у процессоров на основе ARM - это совсем не одно и то же. Уж насколько AVR простой как трехлинейная винтовка, а и то в AVRStudio не вся периферия симулируется. К чему бы это?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jul 18 2010, 06:09
|
Группа: Участник
Сообщений: 14
Регистрация: 16-04-09
Из: Томск
Пользователь №: 47 801

|
Хочу оценить время выполнения участка программы (от одной точки останова до другой)... Как это сделать в IAR EW ARM ?
|
|
|
|
|
Jul 18 2010, 10:54
|
Группа: Участник
Сообщений: 14
Регистрация: 16-04-09
Из: Томск
Пользователь №: 47 801

|
Цитата(sergeeff @ Jul 18 2010, 13:29)  Писалось об этом многократно. Самый надежный и простой метод - формирование импульса на время вызова участка программы и его измерение осциллографом. Надежный в том смысле, что это реальная длительность с учетом все возможных прерываний и прочего. Этот способ не принадлежит среде разработки и требует дополнительного оборудования - осциллографа. Это как крайний вариант который можно сделать всегда, но не всегда это удобно. В моём вопросе речь про штатные средства среды IAR для вычисления процессорных тактов. Например, в CodeComposer для TMS320 такой счетчик есть и учитывает он все произошедшие прерывания. Видел также такой счечик в IAR AVR... А вот для ARM не могу найти
Сообщение отредактировал WhiteFang - Jul 18 2010, 10:59
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|