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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Отсчёт времени/тактов в симуляторах Keil и IAR, Какое-то сплошное враньё!?
Dimonira
сообщение Jun 26 2007, 20:29
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777



Контроллер ADuC7024.
Делал сначала софт в IAR 4.41. Мне нужна была дубовая функция задержки с параметром в миллисекундах. Чтобы "настроить" её, я запустил программу в симуляторе, через профайлер посмотрел сколько выполняется функция задержки и исходя из этого скорректировал вычисление нужного счётчика в функции.
Но в реальности мне показалось, что задержки выполняются дольше рассчитанного времени. На глаз показалось, что на треть. Получилось, что симулятор IAR врёт в более быструю сторону.

Потом решил код частично отладить в Keil mdk 3.10, т.к. там удобнее (чем в IAR) в симуляторе смотреть такты и время выполнения отдельных строчек кода. Начал как раз с функции задержки, т.к. она простая. И тут выяснилось, что та же функция выполняется (по симулятору) вдвое дольше. Количество тактов и время выполнения в симуляторе соответствуют друг другу (проверил на всякий). Решил посмотреть на реальном выполнении. В результате задержка, которая в симуляторе была 20с (по тактам и счётчику времени), реально выполнялась где-то за 14.3с. Получается, что симулятор насчитывает больше тактов, чем проходит в реальности. Подобрал расчёт счётчика в функции задержки по реальному выполнению. Теперь задержка в 10с в симуляторе проходит за 14.3с. Получилось, что пришлось уменьшить значение счётчика примерно на столько, на сколько мне казалось медленнее работает задержка в реальном выполнении в IAR.

Короче, в итоге, реальная задержка выполняется одинаково, что после Keil, что после IAR.
А вот симуляторы врут, причём в разные стороны и довольно прилично.

В чём тут трабл? Или изначально ориентироваться на временные отсчёты в симуляторах не стоило?

Просто мне бы надо отработать/отладить "трудоёмкий" код, где вычисления с плавающей точкой и хотелось бы иметь достаточно правдивый "инструмент" замера тактов/времени.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 26 2007, 20:38
Сообщение #2


Гуру
******

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



"По-уму" точные задержки обычно формируются на основе аппаратного таймера.
Go to the top of the page
 
+Quote Post
Dimonira
сообщение Jun 27 2007, 04:51
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777



Да мне не задержки точные нужны, это не проблема.
Мне "инструмент" точный нужен, т.е. чтобы симулятор считал такты правильно, а не от балды. Чтобы то что в симуляторе происходит, совпадало бы с действительностью. Иначе нах нужен такой симулятор?
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 27 2007, 09:56
Сообщение #4


Гуру
******

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



Тогда наверное стоит почитать что-нибудь про саму архитектуру ядра ARM и про конкретный МК с этим ядром.
Go to the top of the page
 
+Quote Post
Dimonira
сообщение Jun 27 2007, 11:12
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777



Блин, такие советы я и сам могу давать кому угодно по любому поводу. Но воздерживаюсь.
Какое отношение имеют мои знания или незнания архитектуры к некорректной работе симулятора? Не я же писал этот симулятор.
Или вы даёте совет разработчикам симулятора? Тогда вроде не по адресу.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 27 2007, 11:32
Сообщение #6


Гуру
******

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



Если вы хорошо знаете архитектуру, то попробуйте поставить себя на место разработчика симулятора. И формализуйте правило для подсчета тактов в зависимости (или вне зависимости) от настроек конкретного МК в конкретной программе.
Go to the top of the page
 
+Quote Post
Wano
сообщение Jun 27 2007, 11:52
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Кароче это фуфло я узнал ещё давно. Как мне показалось,параметры: частоты проца,ARM или THUMB функции выполняются, всё это весьма посредственно,либо вообще не учитывается. Про SPI и SSP я вообще не говорю,симулятор про них и не знает. Посмотреть следование импульсов нельзя. Делать надо через программный SPI.Нормально работают таймеры,ШИМ и прерывания. В общем лучше иметь платку и осцильник.
Go to the top of the page
 
+Quote Post
vetal
сообщение Jun 27 2007, 12:23
Сообщение #8


Гуру
******

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



Сделать такой симулятор, который будет со 100% точностью отрабатывать периферию, системную шину, и достаточно сложный процессор не так и просто, да и вам такой не нужен. Отрабатывать он будет от силы 10K-100Kcycles/s на очень навороченной машине и стоить немеряно денег.
Проще и дешевле воспользоваться аппаратными средствами поддержки разработок.
Go to the top of the page
 
+Quote Post
Dimonira
сообщение Jun 27 2007, 18:32
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777



Ну, я ж говорю не про работу симулятора в реальном времени. Пусть медленно работает, но правильно.
Уж этому АРМу столько времени, что можно было бы за это время что-то приличное сделать. Тем более, что эти продукты (Keil и IAR) стоят немеряно денег!
Если бы у меня так работало то что я делаю, меня бы уже давно с работы выперли...
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 27 2007, 19:00
Сообщение #10


Гуру
******

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



Цитата(Dimonira @ Jun 28 2007, 00:32) *
Если бы у меня так работало то что я делаю, меня бы уже давно с работы выперли...

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

Такое сопоставление сообщений весьма улыбнуло biggrin.gif
Go to the top of the page
 
+Quote Post
vetal
сообщение Jun 27 2007, 19:03
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 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) - уровень достаточный для отладки БОЛЬШИНСТВА программ.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 27 2007, 22:07
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
WhiteFang
сообщение Jul 18 2010, 06:09
Сообщение #13





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



Хочу оценить время выполнения участка программы (от одной точки останова до другой)... Как это сделать в IAR EW ARM ?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 18 2010, 10:29
Сообщение #14


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(WhiteFang @ Jul 18 2010, 09:09) *
Хочу оценить время выполнения участка программы (от одной точки останова до другой)... Как это сделать в IAR EW ARM ?


Писалось об этом многократно. Самый надежный и простой метод - формирование импульса на время вызова участка программы и его измерение осциллографом. Надежный в том смысле, что это реальная длительность с учетом все возможных прерываний и прочего.
Go to the top of the page
 
+Quote Post
WhiteFang
сообщение Jul 18 2010, 10:54
Сообщение #15





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



Цитата(sergeeff @ Jul 18 2010, 13:29) *
Писалось об этом многократно. Самый надежный и простой метод - формирование импульса на время вызова участка программы и его измерение осциллографом. Надежный в том смысле, что это реальная длительность с учетом все возможных прерываний и прочего.


Этот способ не принадлежит среде разработки и требует дополнительного оборудования - осциллографа. Это как крайний вариант который можно сделать всегда, но не всегда это удобно.
В моём вопросе речь про штатные средства среды IAR для вычисления процессорных тактов. Например, в CodeComposer для TMS320 такой счетчик есть и учитывает он все произошедшие прерывания. Видел также такой счечик в IAR AVR... А вот для ARM не могу найти

Сообщение отредактировал WhiteFang - Jul 18 2010, 10:59
Go to the top of the page
 
+Quote Post

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

 


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


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