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

Что лучше взять для AVR?

Использую IAR C 2.28 (написания кода) + AVRstudio (для отладки, проверки временных интервалов). ИМХО очень хорошая "парочка".

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


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

А есть ли какая-то литература (желательно русская) по IAR? По чему лучше его освоить?

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


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

А есть ли какая-то литература (желательно русская) по IAR? По чему лучше его освоить?

 

К сожалению не находил, когда пытался освоить IAR. Но к тому времени я уже немного знал английский (очень не много) и потихоньку разбирал мануал пользователя. Там все доходчиво сказано. Если у Вас возникнут вопросы, я думаю на них смогут ответить на этом форуме, потому, что там (в IAR) все на самом деле очень просто.

 

На счет освоить... Я сначала открыл и скомпилировал пример, который прилагается к дистрибутиву IAR, затем с нуля начал свой проект, по пути знакомясь с особенностями IAR EWAVR.

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


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

Спасибо. Видимо, пока у меня будет наоборот, быстрые проекты - на ассемблере, когда время не поджимает - на Си.

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

Изменено пользователем Георгий

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


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

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

Цельная картина складывается после сборки проекта, но в IAR-овском линкере не предусмотрена такая возможность (а может я ей просто не пользуюсь ;) ).

Если бы Вы сказали зачем оно нужно, то может можно было бы поискать обходные манёвры, например:

- загрузить проект в отладчик IAR и вызвать окно дизассемблера;

- загрузить проект в AVRStudio и далее так же.

Изменено пользователем IgorKossak

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


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

В WinAVR-е было удобно контролировать, что компилится и как реализуются какие-то куски программы (после чего я его и покинул). Просто у меня начались временные расхождения в программах, отлаживаемых в разных системах, вот и хотелось бы иметь этот ассемблереый код. Но похоже такого вообще нет. Перерыл все что идет с IAR, все установки поперепробовал, но увы мне :(

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


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

Столкнулся с непоняткой компиляции IAR-а.

Исходник:

void delay20mks(void)
{
char j,k;

  for (j=0; j< 6; j++)
    for (k=0; k<176; k++);
}

В Debug режиме:

    21          void delay20mks(void)
   \                     delay20mks:
     22          {
     23           char j,k;
     24          
     25            for (j=0; j< 6; j++)
   \   00000000   E010               LDI     R17, 0
   \   00000002   C004               RJMP    ??delay20mks_0
     26              for (k=0; k<176; k++);
   \                     ??delay20mks_1:
   \   00000004   9503               INC     R16
   \                     ??delay20mks_2:
   \   00000006   3B00               CPI     R16, 176
   \   00000008   F3E8               BRCS    ??delay20mks_1
   \   0000000A   9513               INC     R17
   \                     ??delay20mks_0:
   \   0000000C   3016               CPI     R17, 6
   \   0000000E   F410               BRCC    ??delay20mks_3
   \   00000010   E000               LDI     R16, 0
   \   00000012   CFF9               RJMP    ??delay20mks_2
     27          }
   \                     ??delay20mks_3:
   \   00000014   9508               RET

В Release режиме:

     21          void delay20mks(void)
   \                     delay20mks:
     22          {
     23           char j,k;
     24          
     25            for (j=0; j< 6; j++)
   \   00000000   E006               LDI     R16, 6
     26              for (k=0; k<176; k++);
   \                     ??delay20mks_0:
   \   00000002   950A               DEC     R16
   \   00000004   F7F1               BRNE    ??delay20mks_0
     27          }
   \   00000006   9508               RET
     28

Почему Релизовая версия напрочь отмела внутренний цикл фор?

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


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

...Почему Релизовая версия напрочь отмела внутренний цикл фор?

Это результат оптимизации.

Если нужно сделать временнУю задержку - применяйте __delay_cycles(long timeout);

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


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

А где она описана, какой хедер надо подключить?

И если компилер так бездумно оптимизирует, получается его надо перепроверять?!

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


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

А где она описана, какой хедер надо подключить?

И если компилер так бездумно оптимизирует, получается его надо перепроверять?!

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

 

Если хочется подавить подобные оптимизации, то можно использовать прямое указание компилятору не оптимизировать, объявив одну из переменных как volatile. Тогда компилятор не будет иметь права делать какие-либо предположения о поведении этой переменной и вынужден будет честно сгенерировать код для нее, даже если этот код ничего с точки зрения компилятора не делает.

 

Формирование задержки этим способом имеет то неудобство, что сложно предсказать, во сколько тактов реально выльется цикл. Для задания точной задержки в пакете EWAVR имеется специальная intrinsic функцию __delay_cycles(). При ее вызове компилятор сам организует код, формирующий указанную задержку. Чтобы она работала, нужно подключить заголовок inavr.h, иначе компилятор не видит прототипа и ругается.

 

Т.ч. почитайте, во-первых, доку по С, во-вторых, доку на компилятор - она очень внятная. Удачи.

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


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

А где она описана, какой хедер надо подключить?

И если компилер так бездумно оптимизирует, получается его надо перепроверять?!

Не нужно его постоянно проверять.

Постоянно-то не надо, а вот время от времени - очень даже полезно :) Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.

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


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

... Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.

Предупреждать уже надоело :twak:

Ещё один скоропалительный вывод - и буду банить.

 

PS: если руки-не-оттуда, то причём тут компилятор!

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


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

... Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.

Предупреждать уже надоело :twak:

Ещё один скоропалительный вывод - и буду банить.

Я имел в виду не применительно к данной ситуации, а вообще. Это не скоропалительный вывод, а плод 5 лет мучений с данным продуктом. Если надо - могу покопаться и для версий ИАРа, начиная от 2.20C до 4.10 перечислить все "огрехи" оптимизатора. Теперь вот дошёл до того, что всегда стараюсь ставить минимальную оптимизацию, если ресурсы позволяют.

 

ЗЫ. Баньте сразу, что ж вы опять предупреждаете? :smile3009:

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


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

Гость MALLOY2

... Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.

Предупреждать уже надоело :twak:

Ещё один скоропалительный вывод - и буду банить.

Я имел в виду не применительно к данной ситуации, а вообще. Это не скоропалительный вывод, а плод 5 лет мучений с данным продуктом. Если надо - могу покопаться и для версий ИАРа, начиная от 2.20C до 4.10 перечислить все "огрехи" оптимизатора. Теперь вот дошёл до того, что всегда стараюсь ставить минимальную оптимизацию, если ресурсы позволяют.

 

 

НЕ знаю помоему очень ничего у него компилятор, посравнению с другими, скажем с KEIL, и оболочка немного получше, а главное он простой как бробка.

 

P.S. какие есть докозательства что он "корявый" ?

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


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

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

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

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

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

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

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

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

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

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