Перейти к содержанию
    

Оптимизация в IAR 4.10b

Вопрос - оптимальная степень оптимизации. Заметил косячок на максимальной оптимизации. Какую лучше ставить, чтобы не проверять каждый раз правильно ли откомпилированно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть такая традиция - отключать оптимизацию при отладке [DEBUG mode]: багов по определению нет т.к. идет тупая сборка (компиляция) из готовых и неоптимизированных кусков.

После того, как разработчик отработал алгоритм в функционально законченном виде - приступаем к оптимизации [RELISE mode]. Мой практикум в программировании под ИАРом показывает, что косяки выявляются в таких кусках кода, которые не красиво написаны в сЁвом синтаксисе. Например, в какой-то ранней версии (не помню) функция не возвращала сложную составную переменную, получаемую в строке с return-ом, в более поздней - работает !!!

Пусть специалисты меня поправят...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос - оптимальная степень оптимизации. Заметил косячок на максимальной оптимизации. Какую лучше ставить, чтобы не проверять каждый раз правильно ли откомпилированно?

Максимальная. По скорости или по размеру - зависит от проекта.

А глюки - они везде есть. И не факт, что на меньших уровнях их не будет - бывали ситуации, когда на высшем уровне оптимизации все было хорошо, а при меньшем - лажалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всегда использую только максимальную оптимизацию (в том числе и в дебаге - на последних стадиях отладки). Единственный "глюк" возникал только с участками кода где в условии цикла используется значение переменной не изменяемой в пределах текущего цикла (но её значение может меняться в прерывании). Просто забывал добавить в определении переменной модификатор volatile.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот какая штука замечена в 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.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 этот глюк исправили

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 3.20D этот глюк исправили

 

Да, слышал, но качать 50 мег, кряк искать... Влом... Когда глюк известен - он не страшен :-)

К тому же есть хороший принцип - работает - не трогай!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...