Написал простой кусок кода - вывод значения на 7-ми сегментный индикатор.
Включил максимальную оптимизацию и посмотрел что получилось.
Честно говоря, я ожидал примерно следующего - грузим число в аккумулятор, сдвигаем его через перенос и в зависимости от переноса устанавливаем нужный бит нужного порта.
Получилось, конечно, очень похоже, но я не понимаю 2 момента:
1. Зачем для каждого пина сдвигать и аккумулятор и память?
Почему не что-то одно (лучше аккум), а потом просто скопировать, если уж сильно хочется?
А почему вообще должно хотется при выходе из функции иметь где-то последнее значение value - оно же явно больше нигде не используется.
2. Что это за манипуляции в конце функции перед RET?
Ну и основной вопрос - посоветуйте как переписать код (на C, на асме я и сам знаю), что бы он таки скомпилился правильно.
Спасибо!
P.S. Уже перепробовал кучу разных, полностью равнозначных с точки зрения С, вариантов реализации этого куска кода.
Изначально ожидал что хороший оптимизатор сгенерит одинаковый (самый оптимальный) ассемблерный код.
Но нет, почти любой изменение приводит к разному результату компиляции.
IAR 1.31 - Оптимизация
Советую особо не замотрачиваться, и просто писать высокоскоростные куски кода на ASSEMBLER, а все остальное - на С
Вернуться в «Микроконтроллеры и ПЛИС»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя