|
|
  |
Какую среду разработки Вы используете? |
|
|
|
May 25 2006, 21:55
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Итак наш ответ Чемб... простите DXP IAR и WinAVR у меня другой версии, так что результаты получились несколько другие: IAR : last flash byte address = 0x00BF last flash word address = 0x005F GCC: ; last flash byte address = 0x00D3 ; last flash word address = 0x0069 0xD3 - 0xBF = 0x14 = 20 Итак мне стало интересно на чем набежала разница. Из-за отличия в листингах я собрал все в два hex и подсунул в оба ReAVR. Результат прилагаеться: Не буду утомлять листингом он прокомментирован. Мы имеем функцию main() и вызываемые из нее LEDon() и Delay(), кроме того имеем начальную инициализацию(Cstartup) и таблицу векторов прерываний. Итак функция main() сделанная gcc в лоб - 41 команда. IAR который вынес пролог и два фрагмента в подпрограммы - 42 команды. Delay() решение одинаковое 5 команд. LEDon() - gcc 12 команд одним куском, IAR 7 + 5 подпрограмма. Инициализация стека - оба по 12 хотя IAR без RCALL не может. Ну с векторами вопросов нет - одинаково. Итак в чем же разница - а вот в чем - GCC включает код для инициализации глобальных переменных. В простом тесте их нет и соответственно IAR идет на обгон, там где они появляются и IAR включает подобный код. В принципе это дело можно в gcc и поскипать, о какая в том надобность. Если отбросить стартап - на исполняемой части gcс выигрывает одну команду без бесконечных прыжков по коду. Ассемблерный код красивый ясный и быстрый. Правда надо отдать должное IARу - красивая замена rcall на rjmp хорошо экономит стек, так же вызов пролога сделан намного лучше чем в gcc
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
May 26 2006, 03:03
|
Местный
  
Группа: Участник
Сообщений: 205
Регистрация: 8-03-05
Пользователь №: 3 146

|
А вот что у меня получилось Цитата avr-gcc -g -Wall -Os -mmcu=atmega16 -c -o test.o test.c
text data bss dec hex filename 130 0 0 130 82 test.o Однако gcc не идеален, потому сделаем так Цитата void main(void) __attribute__ ((naked)); тогда Цитата text data bss dec hex filename 122 0 0 122 7a test.o - нет двойной установки стека Цитата ldi r28, 0x5f ; 95 ldi r29, 0x04 ; 4 out SPH, r29 out SPL, r28 Вывод ИМХО: iar и gcc - достойные компиляторы, в отличии от CodeVisionAVR.
|
|
|
|
|
May 26 2006, 04:23
|

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

|
Цитата(733259 @ May 26 2006, 10:03)  А вот что у меня получилось Цитата avr-gcc -g -Wall -Os -mmcu=atmega16 -c -o test.o test.c
text data bss dec hex filename 130 0 0 130 82 test.o Однако gcc не идеален, потому сделаем так Цитата void main(void) __attribute__ ((naked)); тогда Цитата text data bss dec hex filename 122 0 0 122 7a test.o - нет двойной установки стека Если в IAR'е main квалифицировать словом __task, которое именно для этой функции в первую очередь и предназначено, то результат будет 114 и 106 байт соответственно.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jul 24 2006, 07:05
|
Тутэйшы
   
Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263

|
Цитата(SasaVitebsk @ Feb 8 2006, 01:55)  Цитата(haker_fox @ Feb 2 2006, 04:18)  В прекрасном будущем  хочу забодать JTAG... А потом прога у меня есть, - просматриваю типа осцил. запоминающего. Очень помогает! Прогой могу поделится, она моя. Будьте так любезны vesago(собачка)rambler.ru С AVR знаком с пару месяцев - пришлось использовать как сопроцессор. Сначала попробовал IAR. После Кейла крайне не понравился. Дискомфортно. Поставил CVAVR. Игрушка какая-то. Вобщем вернулся в IAR. Сейчас уже пообвыкся, даже стал получать удовольствие. Чувствуется - вещь! Отлаживать пробовал в симуляторе студии. Но какая-то убогая она. Если надо алгоритм, то отлично и в яре можно. В студии, допустим, мне не представляется возможным отладить протокол усарта полноценно. TWI не прошел. Из яра когда инициализирую регистры сфр, фигню какую-то грузит, хотя работает првильно. В общем надо поскорее жтаг собирать. Протеус странная прога. Устройство на меге 128 в железе работает. В Протеусе вообще не дышит. Вроде и питание завел и прошивку подкрузил - не работает хоть тресни. А вообще из сред Кейл вне конкуренции имхо.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|