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

 
 
> вопрос по IARy, IAR спасовал?
LeoLabs
сообщение Jun 16 2005, 09:30
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 5-03-05
Пользователь №: 3 082



Компилю текст:
#pragma vector = TIMER2_OVF_vect
__interrupt void system_timer()
{
blink_timer++;
}

и выдает:

#pragma vector = TIMER2_OVF_vect
__interrupt void system_timer()
ST -Y, R31
ST -Y, R30
ST -Y, R17
ST -Y, R16
IN R17, 0x3F
}
blink_timer++;
LDI R30, LOW(blink_timer)
LDI R31, (blink_timer) >> 8
LD R16, Z
INC R16
ST Z, R16
}
OUT 0x3F, R17
LD R16, Y+
LD R17, Y+
LD R30, Y+
LD R31, Y+
RETI

при максимальной оптимизации.
Не пойму почему бы ему не использовать STS? или я что-то не так пишу или хваленый иар не спосбен на подвиги?
ЧТО Я НЕ ТАК ДЕЛАЮ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexOr
сообщение Jun 20 2005, 13:41
Сообщение #2


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

Группа: Свой
Сообщений: 89
Регистрация: 30-12-04
Из: Санкт-Петербург
Пользователь №: 1 754



Кстати,
LDI R30, LOW(blink_timer)
LDI R31, (blink_timer) >> 8
LD R16, Z
INC R16
ST Z, R16

занимает столько же места как и

LDS R30,_blink_timer
SUBI R30,-LOW(1)
STS _blink_timer,R30

но последнее в прерывании намного выгоднее (быстрее и менее расходно по регистрам).
Черт меня дернул сделать проект на IAR.
Сейчас взглянул на прологи/эпилоги и Ужаснулся.

Вопрос вдогонку:
Этот замечательный CodeVision умеет также легко работать с EEPROM как IAR?
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 21 2005, 06:35
Сообщение #3


Adept
******

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



Цитата(AlexOr @ Jun 20 2005, 19:41)
Кстати,
LDI R30, LOW(blink_timer)
LDI R31, (blink_timer) >> 8
LD R16, Z
INC R16
ST Z, R16

занимает столько же места как и

LDS  R30,_blink_timer
SUBI R30,-LOW(1)
STS  _blink_timer,R30

но последнее в прерывании намного выгоднее (быстрее и менее расходно по регистрам).


Это до тех пор, пока у Вас единственное обращение к однобайтовой переменной. Сделайте эту переменную интом, выигрыш не замедлит проявиться. Или, к примеру, если там не к одной переменной обращение, а к нескольким, лежащим в пределах досягаемости указателя (для этого их надо объявлять вместе). Или к структуре обращение. Словом, когда ситуация уходить от первого простейшего случая, результат меняется

Цитата(AlexOr @ Jun 20 2005, 19:41)
Черт меня дернул сделать проект на IAR.
Сейчас взглянул на прологи/эпилоги и Ужаснулся.
*

Не стОит так переживать из-за этой мелочи. Она погоду не делает совершенно. Наоборот, способность IAR'а приводить обращения к косвенным дает очень приличный выигрыш на деле. AVR-GCC имеет весьма неплохой кодогенератор, но он проигрывает IAR'у именно на этом моменте - AVR-GCC злоупотребляет lds/sts, из-за чего размер кода там получается больше.

Не знаю, как сегодня обстоит дело, но некоторое время назад остальные компляторы - CodeVision, ImageCraft уступали по качеству кодогенерации обоим - и IAR'у, и AVR-GCC. Может сейчас что-то изменилось, но сомневаюсь. Сравнивать надо не на коде из трех строк, а на реальных проектах. Попробуйте, увидите, что IAR рулит. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 21 2005, 09:04
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(dxp @ Jun 21 2005, 10:35)
Это до тех пор, пока у Вас единственное обращение к однобайтовой переменной. Сделайте эту переменную интом, выигрыш не замедлит проявиться. Или, к примеру, если там не к одной переменной обращение, а к нескольким, лежащим в пределах досягаемости указателя (для этого их надо объявлять вместе). Или к структуре обращение. Словом, когда ситуация уходить от первого простейшего случая, результат меняется

Цитата(dxp @ Jun 21 2005, 10:35)
Цитата(AlexOr @ Jun 20 2005, 19:41)
Черт меня дернул сделать проект на IAR.
Сейчас взглянул на прологи/эпилоги и Ужаснулся.
*

Не стОит так переживать из-за этой мелочи. Она погоду не делает совершенно. Наоборот, способность IAR'а приводить обращения к косвенным дает очень приличный выигрыш на деле. AVR-GCC имеет весьма неплохой кодогенератор, но он проигрывает IAR'у именно на этом моменте - AVR-GCC злоупотребляет lds/sts, из-за чего размер кода там получается больше.

Не знаю, как сегодня обстоит дело, но некоторое время назад остальные компляторы - CodeVision, ImageCraft уступали по качеству кодогенерации обоим - и IAR'у, и AVR-GCC. Может сейчас что-то изменилось, но сомневаюсь. Сравнивать надо не на коде из трех строк, а на реальных проектах. Попробуйте, увидите, что IAR рулит. smile.gif
*



Прямо сейчас скомпилировал реальный проект средних размеров на меге162.
Результаты:
Код
                    speed    size
CodeVision:        12956    12580
IAR:               12394    11182

Как видим, выигрыш не так уж велик.
Лично меня CodeVision привлекает тем, что генерирует предсказуемый код, отлично интегрируется с ассемблером, а также лучше IAR'а использует аппаратные ресурсы AVR.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 21 2005, 09:25
Сообщение #5


Adept
******

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



Цитата(vet @ Jun 21 2005, 15:04)
Прямо сейчас скомпилировал реальный проект средних размеров на меге162.
Результаты:
Код
                    speed    size
CodeVision:        12956    12580
IAR:               12394    11182

Как видим, выигрыш не так уж велик.

Но он есть! smile.gif И по скорости, и по размеру кода. Несмотря на несуразности в ISR. И не такой уж маленький. Почти 5% в первом случае и более 12 во втором. Представте, что проект занимает не 12 кил, а 15. Тут уже вопрос встает - "влезет/не влезет", а это серьезно.

Кстати, для МК этого калибра размер проекта не такой маленький. Неужели можно так просто взять реальный проект и пересобрать другим пакетом?! Там же куча тулзозависимых вещей типа директив компилятора, расширенных ключевых слов и прочего. Т.е. требуется основательная доработка напильником.

Цитата(vet @ Jun 21 2005, 15:04)
Лично меня CodeVision привлекает там, что генерирует предсказуемый код,

Что непредсказуемого в кодогенерации у IAR?
Цитата(vet @ Jun 21 2005, 15:04)
отлично интегрируется с ассемблером,

Не понял, что имеется в виду.

Цитата(vet @ Jun 21 2005, 15:04)
а также лучше IAR'а использует аппаратные ресурсы AVR.
*

Опять, простите, не понял. Какие ресурсы? В чем "лучшесть"?

Кстати, сравнивать эти два компилятора в некотором роде не совсем корректно - IAR несравненно богаче по возможностям - там есть ++. Это дорогого стОит. Предвижу возражение, что Вам это не надо. Не надо, так не надо. А мне надо. И весьма. Я не агитирую за IAR, не предлагаю бросить используемый инструмент и переходить на него. Смысл всего сказанного в том, что на сегодняшний день в целом IAR (при всех его недостатках) объективно является лучшим пакетом для AVR.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 21 2005, 10:03
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Цитата(dxp @ Jun 21 2005, 13:25)
Цитата(vet @ Jun 21 2005, 15:04)

Как видим, выигрыш не так уж велик.

Но он есть! smile.gif И по скорости, и по размеру кода. Несмотря на несуразности в ISR. И не такой уж маленький. Почти 5% в первом случае и более 12 во втором. Представте, что проект занимает не 12 кил, а 15. Тут уже вопрос встает - "влезет/не влезет", а это серьезно.

Выигрыш по скорости - спорный вопрос. Что касается размера кода, процитирую:
Цитата(dxp @ Jun 21 2005, 13:25)
Всегда должен быть какой-то запас. ... На развитие.

то есть - неправильно закладывать в проект кристалл, на котором программа едва уместится.
Цитата(dxp @ Jun 21 2005, 13:25)
Кстати, для МК этого калибра размер проекта не такой маленький. Неужели можно так просто взять реальный проект и пересобрать другим пакетом?! Там же куча тулзозависимых вещей типа директив компилятора, расширенных ключевых слов и прочего. Т.е. требуется основательная доработка напильником.

Да не особенно, директивы заменяются аналогами вручную, ключевые слова правятся глобальной заменой, а С - он везде С.

Цитата(dxp @ Jun 21 2005, 13:25)
Что непредсказуемого в кодогенерации у IAR?

В CodeVision имеем чёткие правила, как располагаются глобальные/локальные переменные, можно заранее сказать, какие регистры/флаги испортятся после тех или иных операций на С. В случае IAR этого уже нельзя с определённостью сказать на этапе написания программы, он распоряжается регистрами по своему усмотрению и в зависимости от опций проекта.
Цитата(dxp @ Jun 21 2005, 13:25)
Цитата(vet @ Jun 21 2005, 15:04)
отлично интегрируется с ассемблером,

Не понял, что имеется в виду.

Просто примеры:
Код
BOOL TickerNotExpired() {
 #asm("movw r30,_dwCounter")
 #asm("or r30,r31")
}

...

byte KeyPressed() {
 #asm
   lds r30,_key
   clr r31
   sts _key,r31
 #endasm
}

...

 byte b/*r16*/, m/*r17*/, sz/*r18*/, i/*r19*/;

   i = curr_zero;
   b = RxRadioBuf.u[i];
   m = RxFEC[i];
   #asm("swap r17")
   #asm("rol r17")
   #asm("swap r17")
   #asm("rol r16")
   if (PIN_RX) m |= 1;
   m &= 0x0F;
   RxFEC[i] = m;
   RxRadioBuf.u[i] = b;

...

 //memmove(&conf_buf,&conf_buf+1,sizeof(conf_buf)-1);
 i=0;
 #asm
   LDI  R26,LOW(_conf_buf+1)
   LDI  R27,HIGH(_conf_buf+1)
   LDI  R30,LOW(_conf_buf)
   LDI  R31,HIGH(_conf_buf)
 #endasm
 do {
   #asm
     ld r0,x+
     st z+,r0
   #endasm
 } while (++i<sizeof(conf_buf)-1);


Цитата(dxp @ Jun 21 2005, 13:25)
Цитата(vet @ Jun 21 2005, 15:04)
а также лучше IAR'а использует аппаратные ресурсы AVR.
*

Опять, простите, не понял. Какие ресурсы? В чем "лучшесть"?

Пример: карта размещения переменных типичного проекта. Обратите внимание на размещение битовых переменных.
Код
Variable                          Address   Size
f5ms                             GPIOR0.0    1/8
f1s                              GPIOR0.1    1/8
fNeedTransmit                    GPIOR0.2    1/8
thebit                           GPIOR0.3    1/8
failed                           GPIOR0.4    1/8
KeyCode                               90h      1
Digits                                91h      6
fNumberEntered                   GPIOR0.5    1/8
iTransmit                              R2      1
iTestKey                            R3,R4      2
bMatch                           GPIOR0.6    1/8
TestedKey_S7                           R5      1
i1s                                    R6      1
sreg_sv                                R7      1
r30_sv                                 R8      1
code                                  97h      8
last                                  9Fh      8

...

;16   thebit = FALSE; if (TCH_IN) thebit = TRUE;
    CBI  0x13,3
    SBIC 0x10,0
    SBI  0x13,3


Цитата(dxp @ Jun 21 2005, 13:25)
Кстати, сравнивать эти два компилятора в некотором роде не совсем корректно - IAR несравненно богаче по возможностям - там есть ++. Это дорогого стОит. Предвижу возражение, что Вам это не надо. Не надо, так не надо. А мне надо. И весьма. Я не агитирую за IAR, не предлагаю бросить используемый инструмент и переходить на него. Смысл всего сказанного в том, что на сегодняшний день в целом IAR (при всех его недостатках) объективно является  лучшим пакетом для AVR.
*

Бесспорно, IAR - самый мощный компилятор для AVR, другое дело, что преимущества IAR'а проявляются на больших проектах, писать же код для какой-нибудь tiny2313, на мой взгляд, удобнее и выгоднее на CV.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- LeoLabs   вопрос по IARy   Jun 16 2005, 09:30
- - vet   Цитата(LeoLabs @ Jun 16 2005, 13:30)Не пойму ...   Jun 16 2005, 09:54
|- - LeoLabs   не верю! ну не может такого быть!   Jun 17 2005, 04:22
- - vet   Ещё немного сравнительных результатов от ICC v6.30...   Jun 17 2005, 06:28
- - AlexOr   Нет слов. Только маты.   Jun 20 2005, 13:28
- - vet   Цитата(AlexOr @ Jun 20 2005, 17:41)Кстати, LD...   Jun 20 2005, 15:23
|- - LeoLabs   Задал этот вопрос (почему через указатели а не чер...   Jun 21 2005, 01:12
- - LeoLabs   [/quote] Не стОит так переживать из-за этой мелоч...   Jun 21 2005, 07:08
|- - dxp   Цитата(LeoLabs @ Jun 21 2005, 13:08)Но прерыв...   Jun 21 2005, 07:36
|- - LeoLabs   Цитата(dxp @ Jun 21 2005, 14:36)Цитата(LeoLab...   Jun 21 2005, 07:57
|- - dxp   Цитата(LeoLabs @ Jun 21 2005, 13:57)ну что ж:...   Jun 21 2005, 09:05
|- - LeoLabs   Цитата(dxp @ Jun 21 2005, 16:05)Непонятно, ка...   Jun 22 2005, 01:24
|- - dxp   Цитата(LeoLabs @ Jun 22 2005, 07:24)Цитата(dx...   Jun 22 2005, 04:30


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:38
Рейтинг@Mail.ru


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