реклама на сайте
подробности

 
 
> IAR vs AVR GCC, Непрокомпилы
IXFN50N80Q2
сообщение Jul 21 2009, 21:54
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 138
Регистрация: 12-05-09
Пользователь №: 48 987



Профессионально пишу уже 2 года на ASMе и Cшке(AVR GCC) для AVRок.
На GCC есть одна вещь которая бесит порой. Оптимизатор.
Работаю на уровне Os(высший, by size).
Оптимизирует нехреново. В железе работает, в отладчике на уровне переменных практически не протрассируеш. Только в дизасм смотри.
Так вот этот GCC иногда считает многие участки кода не нужными.

Допустим запускаю ацп конверсию с прерыванием, в прерывании ставлю какой то флаг,
и по флагу этому в цикле, я должен что то сделать. Ну да ладно подробности.
Факт в том что компилятор теряет логические связи, считает участок кода не нужным.
Выбрасывает его, ставит бесконечный цикл.
Бороться с ним конечно всячески можно(извращениями).

Вот хотел спросить, как по части непрокомпилов(непонимании компилятора) IAR ?
При максимальном уровне оптимизации.
Ну и скажите свои за и против IAR.
Просто думаю, стоит его осваивать взамен AVR GCC иль нет.

To Moderators, если в не тот раздел попал, просьба сильно не пинать.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jul 22 2009, 15:06
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Задача компилятора - перевести описание с языка, понятного человеку (ЯВУ), на язык, "понятный" МК или CPU, используя формализованные правила. Причем формализованные правила составляет тоже человек или группа людей, те, которые компилятор писали. Если в дилемме: кто был первым яйцо или курица?, то бишь что первично компилятор или программист, его использующий?, считать первичным компилятор, то так и выходит - в 99,9% виноват программист, который не прочитал, не понял или недопонял правила по которым работает компилятор. 0,1% отнесем на ошибки, допущенные теми, кто писал компилятор или документацию для него, т.к. никто полностью от ошибок не застрахован.
Использование квалификатора volatile для описания глобальных переменных, модифицируемых в прерываниях, это всего лишь начальные азы понимания о том, по каким правилам работает компилятор. Но ради справедливости стоит уточнить, что на эти "грабли" наступает очень много начинающих программировать на Си, которые бегло прочитали стандарт Си, но не удосужились прочитать документацию на используемый ими компилятор. Поэтому программа вида
Код
unsigned int cntr;

void main(void)
{
  ...
  cntr=1000;
  while(cntr!=0);
  ...
}

#pragma vector=TIMER_VECTOR
#pragma type_attribute=__interrupt
void TIMER_ISR (void)
{ if (cntr>0)
    cntr--;
}

практически всегда будет компилироваться так, что оператор while скомпилируется в "вечный цикл", вне зависимости от правильности инициализации/функционирования таймера и описания функции обработчика его прерывания. А чтобы этого не произошло обычно достаточно пояснить компилятору, что именно вы от него хотите, объявив переменную cntr как
Код
volatile unsigned int cntr;
laughing.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- IXFN50N80Q2   IAR vs AVR GCC   Jul 21 2009, 21:54
- - aaarrr   Цитата(IXFN50N80Q2 @ Jul 22 2009, 01:54) ...   Jul 21 2009, 22:01
- - IXFN50N80Q2   Volatile Знаю. Но искать скрытые подвохи по дизасм...   Jul 21 2009, 22:06
|- - aaarrr   Цитата(IXFN50N80Q2 @ Jul 22 2009, 02:06) ...   Jul 21 2009, 22:13
- - IXFN50N80Q2   Хм. Интересна ваша логика. Виноват программист. По...   Jul 21 2009, 23:06
|- - aaarrr   Цитата(IXFN50N80Q2 @ Jul 22 2009, 03:06) ...   Jul 21 2009, 23:12
|- - Qwertty   Цитата(IXFN50N80Q2 @ Jul 22 2009, 03:06) ...   Jul 21 2009, 23:20
|- - MrYuran   Цитата(IXFN50N80Q2 @ Jul 22 2009, 03:06) ...   Jul 22 2009, 04:34
- - IXFN50N80Q2   Ладно. Не буду с вами "ругаться" и пытат...   Jul 21 2009, 23:29
|- - aaarrr   Цитата(IXFN50N80Q2 @ Jul 22 2009, 03:21) ...   Jul 21 2009, 23:36
|- - gotty    Цитата(IXFN50N80Q2 @ Jul 22 2009, 02:29)...   Jul 22 2009, 06:34
|- - tag   Цитата(IXFN50N80Q2 @ Jul 22 2009, 02:29) ...   Jul 22 2009, 12:26
|- - SasaVitebsk   Цитата(tag @ Jul 22 2009, 15:26) ...уверя...   Jul 22 2009, 15:24
- - IXFN50N80Q2   Безвыходных случаев с WINAVR не было. Всяческими с...   Jul 21 2009, 23:43
- - zltigo   Цитата(IXFN50N80Q2 @ Jul 22 2009, 00:54) ...   Jul 22 2009, 04:53
- - haker_fox   Нет ничего идеального. Все создается людьми. Друго...   Jul 22 2009, 07:44
- - aaarrr   Цитата(rezident @ Jul 22 2009, 19:06) Зад...   Jul 22 2009, 15:11
- - rezident   Цитата(aaarrr @ Jul 22 2009, 21:11) Форма...   Jul 22 2009, 15:40


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016