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

 
 
> вопрос по 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
vet
сообщение Jun 20 2005, 15:23
Сообщение #3


Знающий
****

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



Цитата(AlexOr @ Jun 20 2005, 17: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

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

Вопрос вдогонку:
Этот замечательный CodeVision умеет также легко работать с EEPROM как IAR?
*


Да, практически так же:
Код
 eeprom struct tag_conf {
   char block;
   char RegionString[16];
   char data[64];
 } eeConf;

unsigned int char CheckEEPROM(void)
{
 //вычисление контрольной суммы структуры eeConf в EEPROM
 char eeprom *p;
 unsigned int sum;
 char i;

 sum = 0;
 p = &eeConf;
 for (i=0; i<sizeof(eeConf); i++) sum += *p++;
 return sum;
}


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


Участник
*

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



Задал этот вопрос (почему через указатели а не через STS) разработчикам, жду ответа, но т.к. у меня нет лицензии ждать придется долго, если вообще дождусь.
Но что я накопал: в applications notes лежит pdfник "Efficient C Coding for AVR".
наткнулся я там на следующее:

When accessing the global variables as structures the compiler is using the Z-pointer and the LDD and STD (Load/store with displacement) instructions to access the data. When the global variables are accessed without structures the compiler use LDS and STS (Load/store direct to SRAM).

, что по-русски значит: если переменная объявлена как структура, то компилятор будет использовать указатели, если нет то через LDS и STS.

вот такие дела.

однако переменная у меня объявлена:
unsigned char blink_timer = 0;
где не вижу я структуры.

, еще не стоит я думаю горячиться по поводу прологов, эпилогов и т.п. Не редко проблемы с компилятором называются "сам дурак".

P.S. pdfник "Efficient C Coding for AVR" ориентирован на иаровский компилятор.
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
- - dxp   Цитата(AlexOr @ Jun 20 2005, 19:41)Кстати, LD...   Jun 21 2005, 06:35
- - 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
- - vet   Цитата(dxp @ Jun 21 2005, 10:35)Это до тех по...   Jun 21 2005, 09:04
- - dxp   Цитата(vet @ Jun 21 2005, 15:04)Прямо сейчас ...   Jun 21 2005, 09:25
- - vet   Цитата(dxp @ Jun 21 2005, 13:25)Цитата(vet ...   Jun 21 2005, 10:03


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

 


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


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