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