IAR 1.31 - Оптимизация

Все о микроконтроллерах: AVR, PIC, STM8, STM32, Arduino, Altera, Xilinx, все что угодно. Этот раздел для всего что клацает байтиками.
Victor
Сообщения: 24
Откуда: Киев

Сообщение Victor » 08 ноя 2012, 17:44

Написал простой кусок кода - вывод значения на 7-ми сегментный индикатор.
Включил максимальную оптимизацию и посмотрел что получилось.
IAR.png

Честно говоря, я ожидал примерно следующего - грузим число в аккумулятор, сдвигаем его через перенос и в зависимости от переноса устанавливаем нужный бит нужного порта.
Получилось, конечно, очень похоже, но я не понимаю 2 момента:
1. Зачем для каждого пина сдвигать и аккумулятор и память?
Почему не что-то одно (лучше аккум), а потом просто скопировать, если уж сильно хочется?
А почему вообще должно хотется при выходе из функции иметь где-то последнее значение value - оно же явно больше нигде не используется.

2. Что это за манипуляции в конце функции перед RET?

Ну и основной вопрос - посоветуйте как переписать код (на C, на асме я и сам знаю), что бы он таки скомпилился правильно.

Спасибо!

P.S. Уже перепробовал кучу разных, полностью равнозначных с точки зрения С, вариантов реализации этого куска кода.
Изначально ожидал что хороший оптимизатор сгенерит одинаковый (самый оптимальный) ассемблерный код.
Но нет, почти любой изменение приводит к разному результату компиляции.

michbil
Сообщения: 1

Сообщение michbil » 04 мар 2013, 09:30

Советую особо не замотрачиваться, и просто писать высокоскоростные куски кода на ASSEMBLER, а все остальное - на С :)

Вернуться в «Микроконтроллеры и ПЛИС»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя