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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Разница CodeVision и WinAVR
pitt
сообщение Jul 24 2006, 22:42
Сообщение #31


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(Woodoo @ Jul 24 2006, 15:31) *
Если речь идет только о портах с адресом 0...0x1F (0x20...0x3F) то это так, но не забудем что к другим портам, с адресом 0x20...0x3F (0x40...0x5F) это не применимо, и компилятор всегда скомпилет чтото типа
in r16, abc
andi r16, ~(1<<bit_name)
out abc, r16

Не совсем правда: для портов, которые не имеют команды SBI будет сгенерировано обращение к памяти.
WinAVR команду OUT давно не использует.


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 24 2006, 23:06
Сообщение #32


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Serg79 @ Jul 24 2006, 14:55) *
А CodeVisionAVR C Compiler пройденный этап. И Я к ниму уже врядли когда вернусь после WinAVR.

И правильно. Хотя:
А IAR еще лучше, но по 5.
А WinAvr хуже, но бесплатно
A CodeVision еще хуже, но по 3.

smile.gif

Цитата(Serg79 @ Jul 24 2006, 14:55) *
А CodeVisionAVR C Compiler пройденный этап. И Я к ниму уже врядли когда вернусь после WinAVR.

И правильно. Хотя:
А IAR еще лучше, но по 5.
А WinAvr хуже, но бесплатно
A CodeVision еще хуже, но по 3.

smile.gif
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 25 2006, 06:44
Сообщение #33


Профессионал
*****

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



Цитата
И правильно. Хотя:
А IAR еще лучше, но по 5.
А WinAvr хуже, но бесплатно
A CodeVision еще хуже, но по 3.


WinAVR не хуже, он просто сложнее в освоении и лишен всяких вкусностей коммерческого продукта.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Guest_Serg79_*
сообщение Jul 25 2006, 09:04
Сообщение #34





Guests






Цитата
WinAVR не хуже, он просто сложнее в освоении и лишен всяких вкусностей коммерческого продукта.

Полностью согласен. А на мой взгляд, он самый "равный" среди "равных".

WinAVR a14.gif
Go to the top of the page
 
+Quote Post
osnwt
сообщение Jul 25 2006, 10:59
Сообщение #35


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

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Цитата(beer_warrior @ Jul 25 2006, 09:44) *
WinAVR не хуже, он просто сложнее в освоении и лишен всяких вкусностей коммерческого продукта.

Насколько слышал, у него есть проблемы с адресацией данных, размещенных в памяти программ. Отсюда и появляются куча макро наподобие

Код
#define PRG_RDB(addr)   (*(PROGMEM char *)(addr))

Макрос из AVR-USB для совместимости с IAR (правое - это IAR'овское выражение). У IAR же нет таких заморочек, используется обычный синтаксис при условии, что указатель описан правильно. Либо, как вариант, можно использовать generic тип указателя, адресующего любой тип памяти.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 25 2006, 11:09
Сообщение #36


Профессионал
*****

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



Цитата
Насколько слышал, у него есть проблемы с адресацией данных, размещенных в памяти программ.

Есть такая, буква, но это единственный серьезный недостаток.
На практике однородные типы данных типа строк обрабатываються нормально, проблемы имеються только со структурами. Тут уже приходится мириться.
По части оптимизации кода и гибкости настроек ИАРу не уступает.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
osnwt
сообщение Jul 25 2006, 11:22
Сообщение #37


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

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Цитата(beer_warrior @ Jul 25 2006, 14:09) *
По части оптимизации кода и гибкости настроек ИАРу не уступает.

Если писать со знанием особенностей конкретного компилятора, то охотно верю. USB драйвер под WinAVR (gcc) компилируется компактнее, чем IAR'ом, поскольку специально оптимизирован под gcc (но не содержит непереносимых между этими компиляторами вещей).

Однако, попытка скомпилировать сторонний код, а именно - реализацию AES декриптора от Atmel, - показала, что для такого кода gcc существенно менее эффективен по сравнению с IAR (1.5 и 1 килобайт кода соответственно). Впрочем, не утверждаю, что тот код не оптимизировался под IAR (хотя по виду не похоже) и не имею желания устраивать войну компиляторов. Просто попробовал на конкретном примере и понял, что в конкретной ситуации IAR эффективнее (и позволил решить задачу втискивания кода в boot область, что не удалось с gcc, хотя код драйвера USB под ним компилировался компактнее на 200 байтов).
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 25 2006, 11:31
Сообщение #38


Профессионал
*****

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



Цитата
Если писать со знанием особенностей конкретного компилятора, то охотно верю. USB драйвер под WinAVR (gcc) компилируется компактнее, чем IAR'ом, поскольку специально оптимизирован под gcc (но не содержит непереносимых между этими компиляторами вещей).

Истинную правду говорите. Очень многое зависит от того как писать.
Цитата
Однако, попытка скомпилировать сторонний код, а именно - реализацию AES декриптора от Atmel, - показала, что для такого кода gcc существенно менее эффективен по сравнению с IAR (1.5 и 1 килобайт кода соответственно).

Это стандартная Атмеловская аппликуха?
Надо будет попробовать. Давно хотел поиметь для теста реальную задачу, чтобы как следует проанализировать оптимизацию IAR и WinAVR.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
pitt
сообщение Jul 25 2006, 15:31
Сообщение #39


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(beer_warrior @ Jul 25 2006, 07:09) *
По части оптимизации кода и гибкости настроек ИАРу не уступает.

Увы, уступает... Чего стоит хотя бы отсутствие прагмы управления оптимизацией. Но $3000 за одно рабочее место, это, конечно, не стоит. Да здравствует WinAVR!


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 25 2006, 17:35
Сообщение #40


Профессионал
*****

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



Цитата
его стоит хотя бы отсутствие прагмы управления оптимизацией.

Что вы вцепились в эту прагму? Это же очень частный случай.
Кроме того если нужен разный уровень оптимизации, разделите код пофайлово и будет вам щастие.

BTW, перечитывал давеча gcc manual:

Цитата
GCC supports several types of pragmas, primarily in order to compile code originally written
for other compilers. Note that in general we do not recommend the use of pragmas SeeSection 5.24 [Function Attributes], page 229, for further explanation.

А уж атрибутами там можно такого накрутить smile.gif


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
osnwt
сообщение Jul 25 2006, 17:37
Сообщение #41


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

Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664



Цитата(beer_warrior @ Jul 25 2006, 14:31) *
Это стандартная Атмеловская аппликуха?
Надо будет попробовать. Давно хотел поиметь для теста реальную задачу, чтобы как следует проанализировать оптимизацию IAR и WinAVR.

Это Appnote по реализации AES boot loader'а от атмела. Проект сделан под IAR, но я в попытках переделать этот проект под USB уперся в размер кода, чтобы впихнуть его с кучкой дополнительных функций и USB HID интерфейсом в 4 килобайта меги32. Потому проводил разные эксперименты по поводу того, как уменьшить размер кода, и пробовал компилировать разными компиляторами (а драйвером avr-usb поддержаны сегодня только gcc и IAR). Вышло, что сказал: сам драйвер компактнее транслируется gcc (но он под него оптимизирован, как и написано в его описании). А вот на коде AES я проиграл полкилобайта. Остался на IAR.
Go to the top of the page
 
+Quote Post
pitt
сообщение Jul 25 2006, 18:50
Сообщение #42


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



Цитата(beer_warrior @ Jul 25 2006, 13:35) *
Цитата
чего стоит хотя бы отсутствие прагмы управления оптимизацией.

Что вы вцепились в эту прагму? Это же очень частный случай.
Кроме того если нужен разный уровень оптимизации, разделите код пофайлово и будет вам щастие.

Я уверен, что Вам хорошо знакомы принципы инкапсуляции, так вот, если "разделить код пофайлово", то о них придеться забыть и никакого "щастия" не будет! А так хочется управлять оптимизацией локально.

Сообщение отредактировал pitt - Jul 25 2006, 18:51


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
tiasur
сообщение Jul 25 2006, 22:16
Сообщение #43


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 24-05-06
Пользователь №: 17 392



AVRGCC 4.1.1

При любой оптимизации:
Код

        PORTD |= ( 1 << 1 );  
  d2:    91 9a           sbi    0x12, 1           ; 18


При отключеной оптимизации:
Код

        PORTD |= ( 1 << 1 );  
  de:    a2 e3           ldi    r26, 0x32; 50
  e0:    b0 e0           ldi    r27, 0x00; 0
  e2:    e2 e3           ldi    r30, 0x32; 50
  e4:    f0 e0           ldi    r31, 0x00; 0
  e6:    80 81           ld    r24, Z
  e8:    82 60           ori    r24, 0x02; 2
  ea:    8c 93           st    X, r24



CodeVision

При любой оптимизации:
Код

;PORTD |= ( 1 << 1 );  
00007e 9a91          SBI  0x12,1


А также:
Код

;PORTD.1 = 1;  
00007f 9a91          SBI  0x12,1


Как видно тут разницы нет никакой. Однако для следующего кода CodeVision обходится всего одним регистром в отличии от AVRGCC 4.1.1:

Код

PORTD = ( 1 << 0 );  
PORTD = ( 1 << 1 );
PORTD = ( 1 << 2 );  
PORTD = ( 1 << 3 );
PORTD = ( 1 << 4 );  
PORTD = ( 1 << 5 );
PORTD = ( 1 << 6 );  
PORTD = ( 1 << 7 );


AVRGCC 4.1.1:
Код
int main(void)
{
  ce:    71 e0           ldi    r23, 0x01; 1
  d0:    62 e0           ldi    r22, 0x02; 2
  d2:    54 e0           ldi    r21, 0x04; 4
  d4:    48 e0           ldi    r20, 0x08; 8
  d6:    30 e1           ldi    r19, 0x10; 16
  d8:    20 e2           ldi    r18, 0x20; 32
  da:    90 e4           ldi    r25, 0x40; 64
  dc:    80 e8           ldi    r24, 0x80; 128

    while(1)
    {
        PORTD = ( 1 << 0 );  
  de:    72 bb           out    0x12, r23; 18
        PORTD = ( 1 << 1 );
  e0:    62 bb           out    0x12, r22; 18
        PORTD = ( 1 << 2 );  
  e2:    52 bb           out    0x12, r21; 18
        PORTD = ( 1 << 3 );
  e4:    42 bb           out    0x12, r20; 18
        PORTD = ( 1 << 4 );  
  e6:    32 bb           out    0x12, r19; 18
        PORTD = ( 1 << 5 );
  e8:    22 bb           out    0x12, r18; 18
        PORTD = ( 1 << 6 );  
  ea:    92 bb           out    0x12, r25; 18
        PORTD = ( 1 << 7 );
  ec:    82 bb           out    0x12, r24; 18


CodeVision:
Код
        ;      34         PORTD = ( 1 << 0 );  
00007a e0e1          LDI  R30,LOW(1)
00007b bbe2          OUT  0x12,R30
        ;      35         PORTD = ( 1 << 1 );
00007c e0e2          LDI  R30,LOW(2)
00007d bbe2          OUT  0x12,R30
        ;      36         PORTD = ( 1 << 2 );  
00007e e0e4          LDI  R30,LOW(4)
00007f bbe2          OUT  0x12,R30
        ;      37         PORTD = ( 1 << 3 );
000080 e0e8          LDI  R30,LOW(8)
000081 bbe2          OUT  0x12,R30
        ;      38         PORTD = ( 1 << 4 );  
000082 e1e0          LDI  R30,LOW(16)
000083 bbe2          OUT  0x12,R30
        ;      39         PORTD = ( 1 << 5 );
000084 e2e0          LDI  R30,LOW(32)
000085 bbe2          OUT  0x12,R30
        ;      40         PORTD = ( 1 << 6 );  
000086 e4e0          LDI  R30,LOW(64)
000087 bbe2          OUT  0x12,R30
        ;      41         PORTD = ( 1 << 7 );                 
000088 e8e0          LDI  R30,LOW(128)
000089 bbe2          OUT  0x12,R30
Go to the top of the page
 
+Quote Post
pitt
сообщение Jul 26 2006, 01:04
Сообщение #44


Местный
***

Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672



WinAVR size:
Код

PORTD = ( 1 << 0 );
  fc:    81 e0           ldi    r24, 0x01; 1
  fe:    8b b9           out    0x0b, r24; 11
PORTD = ( 1 << 1 );
100:    82 e0           ldi    r24, 0x02; 2
102:    8b b9           out    0x0b, r24; 11
PORTD = ( 1 << 2 );
104:    84 e0           ldi    r24, 0x04; 4
106:    8b b9           out    0x0b, r24; 11
PORTD = ( 1 << 3 );
108:    88 e0           ldi    r24, 0x08; 8
10a:    8b b9           out    0x0b, r24; 11
PORTD = ( 1 << 4 );
10c:    80 e1           ldi    r24, 0x10; 16
10e:    8b b9           out    0x0b, r24; 11
PORTD = ( 1 << 5 );
110:    80 e2           ldi    r24, 0x20; 32
112:    8b b9           out    0x0b, r24; 11
PORTD = ( 1 << 6 );
114:    80 e4           ldi    r24, 0x40; 64
116:    8b b9           out    0x0b, r24; 11
PORTD = ( 1 << 7 );
118:    80 e8           ldi    r24, 0x80; 128
11a:    8b b9           out    0x0b, r24; 11
PORTD |= ( 1 << 0 );
11c:    58 9a           sbi    0x0b, 0; 11
PORTD |= ( 1 << 1 );
11e:    59 9a           sbi    0x0b, 1; 11
PORTD |= ( 1 << 2 );
120:    5a 9a           sbi    0x0b, 2; 11
PORTD |= ( 1 << 3 );
122:    5b 9a           sbi    0x0b, 3; 11
PORTD |= ( 1 << 4 );
124:    5c 9a           sbi    0x0b, 4; 11
PORTD |= ( 1 << 5 );
126:    5d 9a           sbi    0x0b, 5; 11
PORTD |= ( 1 << 6 );
128:    5e 9a           sbi    0x0b, 6; 11
PORTD |= ( 1 << 7 );


--------------------
Прокричал немой глухому:"...Спасибо за внимание!"
http://www.youtube.com/watch?v=3Nnj4ky4Z_g
Go to the top of the page
 
+Quote Post
tiasur
сообщение Jul 26 2006, 01:43
Сообщение #45


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 24-05-06
Пользователь №: 17 392



pitt, а какая у Вас версия?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:30
Рейтинг@Mail.ru


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