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

Какую среду разработки Вы преимущественно используете для своих проектов, и почему?  

249 проголосовавших

  1. 1. среда разработки (компилятор/транслятор)

    • AVR-Studio (atmel-avr-asm)
      43
    • AVR-Studio + gcc-plugins
      12
    • IAR-EWAVR преимуществунно (asm)
      0
    • IAR-EWAVR преимущественно ( C )
      79
    • WinAvr (gcc)
      33
    • CodeVision
      52
    • ImageCraft-C
      9
    • E-LAB pascal
      1
    • Alhorithm Builder
      7
    • AVR-Basic
      2
    • другую
      11


(SasaVitebsk @ May 25 2006, 21:41) *

 

А каким образом Вы NOP в проект на C подключали? Может в этом кроется ошибка?

 

 

asm("nop")?

asm volatile("nop") :)

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


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

Итак наш ответ Чемб... простите 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

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


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

А вот что у меня получилось

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.

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


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

# Optimization level, can be [0, 1, 2, 3, s].

# 0 = turn off optimization. s = optimize for size.

# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)[

 

So generally, it seems -Os -mcall-prologues is the most universal "best" optimization level. Only applications that need to get the last few percent of speed benefit from using -O3.

С этими ключами результат ровно тот же.

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


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

А вот что у меня получилось
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 байт соответственно.

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


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

В прекрасном будущем :) хочу забодать JTAG...

А потом прога у меня есть, - просматриваю типа осцил. запоминающего. Очень помогает! Прогой могу поделится, она моя.

 

Будьте так любезны vesago(собачка)rambler.ru :)

 

С AVR знаком с пару месяцев - пришлось использовать как сопроцессор. Сначала попробовал IAR. После Кейла крайне не понравился. Дискомфортно. Поставил CVAVR. Игрушка какая-то. Вобщем вернулся в IAR. Сейчас уже пообвыкся, даже стал получать удовольствие. Чувствуется - вещь! Отлаживать пробовал в симуляторе студии. Но какая-то убогая она. Если надо алгоритм, то отлично и в яре можно. В студии, допустим, мне не представляется возможным отладить протокол усарта полноценно. TWI не прошел. Из яра когда инициализирую регистры сфр, фигню какую-то грузит, хотя работает првильно. В общем надо поскорее жтаг собирать. Протеус странная прога. Устройство на меге 128 в железе работает. В Протеусе вообще не дышит. Вроде и питание завел и прошивку подкрузил - не работает хоть тресни. А вообще из сред Кейл вне конкуренции имхо.

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


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

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

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

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

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

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

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

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

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

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