|
|
  |
Что лучше взять для AVR?, Программить на С. |
|
|
|
Nov 25 2005, 09:07
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(Георгий @ Nov 25 2005, 07:10)  ...Вопрос возник. Когда пробовал WinAvr, он выдавал полный листинг с сишными кодами и ассемблерной реализацией всего проекта в целом. А IAR уменя выдает листинги только по модулям, а цельную картину не могу получить. Это он в принципе не может или я что-то не доделываю? Цельная картина складывается после сборки проекта, но в IAR-овском линкере не предусмотрена такая возможность (а может я ей просто не пользуюсь  ). Если бы Вы сказали зачем оно нужно, то может можно было бы поискать обходные манёвры, например: - загрузить проект в отладчик IAR и вызвать окно дизассемблера; - загрузить проект в AVRStudio и далее так же.
Сообщение отредактировал IgorKossak - Nov 25 2005, 09:07
|
|
|
|
|
Nov 25 2005, 11:02
|
Местный
  
Группа: Свой
Сообщений: 269
Регистрация: 17-11-05
Из: Киров-Москва
Пользователь №: 10 957

|
Столкнулся с непоняткой компиляции 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 Почему Релизовая версия напрочь отмела внутренний цикл фор?
--------------------
Обычно последним смеется тот, кто хуже соображает!
|
|
|
|
|
Nov 25 2005, 12:02
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Георгий @ Nov 25 2005, 17:42)  А где она описана, какой хедер надо подключить? И если компилер так бездумно оптимизирует, получается его надо перепроверять?! Не нужно его постоянно проверят. Нужно немножко подучить язык. У Вас цикл ничего не делает и компилятор его выкидывает, т.к. с его точки зрения (с точки зрения языка) с циклом или без - результат работы программы один и тот же. Но без цикла она работает быстрее и ее размер меньше. Поэтому компилятор и выкидывает этот цикл. Напишите в цикле код, который делает полезную работу и компилятор ничего выкидывать не будет. Если хочется подавить подобные оптимизации, то можно использовать прямое указание компилятору не оптимизировать, объявив одну из переменных как volatile. Тогда компилятор не будет иметь права делать какие-либо предположения о поведении этой переменной и вынужден будет честно сгенерировать код для нее, даже если этот код ничего с точки зрения компилятора не делает. Формирование задержки этим способом имеет то неудобство, что сложно предсказать, во сколько тактов реально выльется цикл. Для задания точной задержки в пакете EWAVR имеется специальная intrinsic функцию __delay_cycles(). При ее вызове компилятор сам организует код, формирующий указанную задержку. Чтобы она работала, нужно подключить заголовок inavr.h, иначе компилятор не видит прототипа и ругается. Т.ч. почитайте, во-первых, доку по С, во-вторых, доку на компилятор - она очень внятная. Удачи.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Nov 25 2005, 12:15
|

Участник

Группа: Новичок
Сообщений: 48
Регистрация: 6-05-05
Пользователь №: 4 784

|
Цитата(dxp @ Nov 25 2005, 15:02)  Цитата(Георгий @ Nov 25 2005, 17:42)  А где она описана, какой хедер надо подключить? И если компилер так бездумно оптимизирует, получается его надо перепроверять?!
Не нужно его постоянно проверять. Постоянно-то не надо, а вот время от времени - очень даже полезно  Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.
--------------------
|
|
|
|
|
Nov 25 2005, 12:52
|

Участник

Группа: Новичок
Сообщений: 48
Регистрация: 6-05-05
Пользователь №: 4 784

|
Цитата(IgorKossak @ Nov 25 2005, 15:35)  Цитата(G}{OST @ Nov 25 2005, 14:15)  ... Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.
Предупреждать уже надоело Ещё один скоропалительный вывод - и буду банить. Я имел в виду не применительно к данной ситуации, а вообще. Это не скоропалительный вывод, а плод 5 лет мучений с данным продуктом. Если надо - могу покопаться и для версий ИАРа, начиная от 2.20C до 4.10 перечислить все "огрехи" оптимизатора. Теперь вот дошёл до того, что всегда стараюсь ставить минимальную оптимизацию, если ресурсы позволяют. ЗЫ. Баньте сразу, что ж вы опять предупреждаете?
--------------------
|
|
|
|
|
Nov 25 2005, 13:07
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата(G}{OST @ Nov 25 2005, 15:52)  Цитата(IgorKossak @ Nov 25 2005, 15:35)  Цитата(G}{OST @ Nov 25 2005, 14:15)  ... Оптимизатор довольно корявый у ИАРа. И от версии к версии разные глюки.
Предупреждать уже надоело Ещё один скоропалительный вывод - и буду банить. Я имел в виду не применительно к данной ситуации, а вообще. Это не скоропалительный вывод, а плод 5 лет мучений с данным продуктом. Если надо - могу покопаться и для версий ИАРа, начиная от 2.20C до 4.10 перечислить все "огрехи" оптимизатора. Теперь вот дошёл до того, что всегда стараюсь ставить минимальную оптимизацию, если ресурсы позволяют. НЕ знаю помоему очень ничего у него компилятор, посравнению с другими, скажем с KEIL, и оболочка немного получше, а главное он простой как бробка. P.S. какие есть докозательства что он "корявый" ?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|