Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Оптимизация в IAR 4.10b
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
LeoLabs
Вопрос - оптимальная степень оптимизации. Заметил косячок на максимальной оптимизации. Какую лучше ставить, чтобы не проверять каждый раз правильно ли откомпилированно?
nameless
Есть такая традиция - отключать оптимизацию при отладке [DEBUG mode]: багов по определению нет т.к. идет тупая сборка (компиляция) из готовых и неоптимизированных кусков.
После того, как разработчик отработал алгоритм в функционально законченном виде - приступаем к оптимизации [RELISE mode]. Мой практикум в программировании под ИАРом показывает, что косяки выявляются в таких кусках кода, которые не красиво написаны в сЁвом синтаксисе. Например, в какой-то ранней версии (не помню) функция не возвращала сложную составную переменную, получаемую в строке с return-ом, в более поздней - работает !!!
Пусть специалисты меня поправят...
dxp
Цитата(LeoLabs @ May 5 2005, 15:28)
Вопрос - оптимальная степень оптимизации. Заметил косячок на максимальной оптимизации. Какую лучше ставить, чтобы не проверять каждый раз правильно ли откомпилированно?
*

Максимальная. По скорости или по размеру - зависит от проекта.
А глюки - они везде есть. И не факт, что на меньших уровнях их не будет - бывали ситуации, когда на высшем уровне оптимизации все было хорошо, а при меньшем - лажалось.
SL@V@
Всегда использую только максимальную оптимизацию (в том числе и в дебаге - на последних стадиях отладки). Единственный "глюк" возникал только с участками кода где в условии цикла используется значение переменной не изменяемой в пределах текущего цикла (но её значение может меняться в прерывании). Просто забывал добавить в определении переменной модификатор volatile.
nml
Вот какая штука замечена в 3.20С:
Объявляю в регистре кучу флагов, например:
Код
volatile __regvar __no_init struct
               {
 unsigned char gluk1:1;    // не исп из-за глюка компилера
 unsigned char sending:1;  //
 unsigned char priem:1;    //
 unsigned char setpnt:1;   //
 unsigned char sohran:1;   //
 unsigned char newotscet:1;    //
 unsigned char smena_rezima:1; //
 unsigned char flagt0:1;       //
     } @ 15;

так вот при оптимизации выше средней запись 1 в мл бит - нормально, а очистка мл бита - генерится CLR R15. Все остальные биты - нормально...
KRS
Цитата(nml @ May 6 2005, 15:43)
Вот какая штука замечена в 3.20С:
Объявляю в регистре кучу флагов, например:
Код
volatile __regvar __no_init struct
               {
 unsigned char gluk1:1;    // не исп из-за глюка компилера
 unsigned char sending:1;  //
 unsigned char priem:1;    //
 unsigned char setpnt:1;   //
 unsigned char sohran:1;   //
 unsigned char newotscet:1;    //
 unsigned char smena_rezima:1; //
 unsigned char flagt0:1;       //
     } @ 15;

так вот при оптимизации выше средней запись 1 в мл бит - нормально, а очистка мл бита - генерится CLR R15. Все остальные биты - нормально...
*

В 3.20D этот глюк исправили
nml
Цитата(KRS @ May 10 2005, 14:09)
В 3.20D этот глюк исправили
*


Да, слышал, но качать 50 мег, кряк искать... Влом... Когда глюк известен - он не страшен :-)
К тому же есть хороший принцип - работает - не трогай!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.