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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> XMEGA и IAR5.11B, оптимизатор
koljakh
сообщение Aug 11 2009, 10:11
Сообщение #1


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

Группа: Участник
Сообщений: 108
Регистрация: 14-07-09
Из: Украина, Киев
Пользователь №: 51 248



Добрый день, всем! Есть один вопрос. Сейчас занимаюсь оптимизацией кода под ATXMEGA128A1,
и вот на что я наткнулся. Внешняя память у меня не подключена, все находится внутри. Следовательно
регистры RAMPD,RAMPX,RAMPZ,RAMPY у меня всегда равны нулю. Но компилер упорно их все время обнуляет и в фоне, и в прерываниях.
При этом для сохранения в прерываниях он использует обычные регистры, которые он перед этим сохраняет, а потом восстанавливает.
Т.к. прерываний у меня дофига, хотелось как-то убрать лишние действия. Вопрос, кто-нить делал это? В стартапе я их обнулю, и дальше компилятор забывает об их существовании.
У компилятора есть предопределенные символы __HAS_RAMPX__, ..., но отенить их #undef нельзя, к сожалению. Или на винавр переходить,
как там дела с этим обстоят?
Go to the top of the page
 
+Quote Post
aesok
сообщение Aug 11 2009, 10:15
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(koljakh @ Aug 11 2009, 14:11) *
сожалению. Или на винавр переходить,
как там дела с этим обстоят?


Точно также.

Анатолий.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 11 2009, 10:22
Сообщение #3


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Но компилер упорно их все время обнуляет и в фоне, и в прерываниях.


Более того, вывод в эти регистры он не оптимизирует совершенно. Ждем новых версий.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
koljakh
сообщение Aug 11 2009, 10:28
Сообщение #4


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

Группа: Участник
Сообщений: 108
Регистрация: 14-07-09
Из: Украина, Киев
Пользователь №: 51 248



Цитата(aesok @ Aug 11 2009, 12:15) *
Точно также.

Анатолий.


Спасибо, остается ИАР и АСМ, а жаль sad.gif

Цитата(Rst7 @ Aug 11 2009, 12:22) *
Более того, вывод в эти регистры он не оптимизирует совершенно. Ждем новых версий.


Да уж, смотрю на дизассемблер и плачу smile.gif Ща качну ДШ на более мелкие чипы, мож у них этих регистров вообще нет, там где нет возможности подключать внешнюю память.
Если да, то может это решит проблему. Или у них у всех одинаковое ядро?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Aug 11 2009, 10:34
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Rst7 @ Aug 11 2009, 13:22) *
Ждем новых версий.


Дык вышли давно такие версии: 5.20 и 5.30. Только последняя из них за прошлый месяц претерпела 4 патча. Последняя полная версия 5.30 со всеми своими 4-мя патчами лежит на FTP (upload/MCs/AVR/IAR-EWAVR-530-full/). Вот только исправлен ли там этот баг, я не знаю, т.к. с XMEGA дела не имела.
Go to the top of the page
 
+Quote Post
koljakh
сообщение Aug 11 2009, 10:37
Сообщение #6


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

Группа: Участник
Сообщений: 108
Регистрация: 14-07-09
Из: Украина, Киев
Пользователь №: 51 248



Ядро одинаковое

Цитата(Xenia @ Aug 11 2009, 12:34) *
Дык вышли давно такие версии: 5.20 и 5.30. Только последняя из них за прошлый месяц претерпела 4 патча. Последняя полная версия 5.30 со всеми своими 4-мя патчами лежит на FTP (upload/MCs/AVR/IAR-EWAVR-530-full/). Вот только исправлен ли там этот баг, я не знаю, т.к. с XMEGA дела не имела.


Спасибо, только у меня доступа к фтп нет sad.gif
Go to the top of the page
 
+Quote Post
Xenia
сообщение Aug 11 2009, 10:48
Сообщение #7


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(koljakh @ Aug 11 2009, 13:37) *
Ядро одинаковое


Трудно сказать с уверенностью, т.к. в патче EWAVR-Patch-5.30.1.zip прислали экшенник iccavr.exe со всеми dll-библиотеками (голенькими, без инсталляции). Что там было изменено, без проверки судить нельзя.

Цитата(koljakh @ Aug 11 2009, 13:37) *
Спасибо, только у меня доступа к фтп нет sad.gif


Не страшно, я вам сейчас в личку линк брошу, где можно без доступа.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 11 2009, 10:55
Сообщение #8


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Вот только исправлен ли там этот баг, я не знаю, т.к. с XMEGA дела не имела.


Это не баг, а недоделка. Не доделана.

Но это не повод сильно материться. Только что глянул и придумал способ.

Ставим в версии 5.30 тип проца ATxmega128A3, в ATxmega128A1.h патчим проверку модели
Код
#if TID_GUARD(6)
//#error This file should only be compiled with iccavr or aavr whith processor option -v6
#endif /* TID_GUARD(6) */


И инклудим напрямик ioxm128a1.h, а не ioavr.h

Результат:
CODE

#include "ioxm128a1.h"
#include "stdafx.h"

#pragma optimize=no_inline
__x_z void mcpy(UINT8 *d, UINT8 *s, UREG c)
{
do
{
*d++=*s++;
}
while(--c);
}

volatile UINT32 cnt;

#pragma vector=PORTA_INT0_vect
__interrupt void intproc(void)
{
cnt++;
}

int main( void )
{
mcpy((UINT8*)1234,(UINT8*)5678,124);
return 0;
}

CODE

1 #include "ioxm128a1.h"
2 #include "stdafx.h"
3
4 #pragma optimize=no_inline

\ In segment FARCODE, align 2, keep-with-next
5 __x_z void mcpy(UINT8 *d, UINT8 *s, UREG c)
\ mcpy:
\ ??mcpy_0:
6 {
7 do
8 {
9 *d++=*s++;
\ 00000000 9111 LD R17, Z+
\ 00000002 931D ST X+, R17
10 }
11 while(--c);
\ 00000004 950A DEC R16
\ 00000006 F7E1 BRNE ??mcpy_0
12 }
\ 00000008 9508 RET
13

\ In segment NEAR_Z, align 1, keep-with-next
\ 00000000 REQUIRE `?<Segment init: NEAR_Z>`
14 volatile UINT32 cnt;
\ cnt:
\ 00000000 DS8 4
15
16 #pragma vector=PORTA_INT0_vect

\ In segment FARCODE, align 2, keep-with-next
17 __interrupt void intproc(void)
\ intproc:
18 {
\ 00000000 93FA ST -Y, R31
\ 00000002 93EA ST -Y, R30
\ 00000004 934A ST -Y, R20
\ 00000006 933A ST -Y, R19
\ 00000008 932A ST -Y, R18
\ 0000000A 931A ST -Y, R17
\ 0000000C 930A ST -Y, R16
\ 0000000E B74F IN R20, 0x3F
19 cnt++;
\ 00000010 .... LDI R30, LOW(cnt)
\ 00000012 .... LDI R31, (cnt) >> 8
\ 00000014 8100 LD R16, Z
\ 00000016 8111 LDD R17, Z+1
\ 00000018 8122 LDD R18, Z+2
\ 0000001A 8133 LDD R19, Z+3
\ 0000001C 5F0F SUBI R16, 255
\ 0000001E 4F1F SBCI R17, 255
\ 00000020 4F2F SBCI R18, 255
\ 00000022 4F3F SBCI R19, 255
\ 00000024 8300 ST Z, R16
\ 00000026 8311 STD Z+1, R17
\ 00000028 8322 STD Z+2, R18
\ 0000002A 8333 STD Z+3, R19
20 }
\ 0000002C BF4F OUT 0x3F, R20
\ 0000002E 9109 LD R16, Y+
\ 00000030 9119 LD R17, Y+
\ 00000032 9129 LD R18, Y+
\ 00000034 9139 LD R19, Y+
\ 00000036 9149 LD R20, Y+
\ 00000038 91E9 LD R30, Y+
\ 0000003A 91F9 LD R31, Y+
\ 0000003C 9518 RETI
21

\ In segment FARCODE, align 2, keep-with-next
22 int main( void )
\ main:
23 {
\ 00000000 93BA ST -Y, R27
\ 00000002 93AA ST -Y, R26
24 mcpy((UINT8*)1234,(UINT8*)5678,124);
\ 00000004 E70C LDI R16, 124
\ 00000006 E2EE LDI R30, LOW(5678)
\ 00000008 E1F6 LDI R31, (5678) >> 8
\ 0000000A EDA2 LDI R26, LOW(1234)
\ 0000000C E0B4 LDI R27, (1234) >> 8
\ 0000000E .... RCALL mcpy
25 return 0;
\ 00000010 E000 LDI R16, 0
\ 00000012 E010 LDI R17, 0
\ 00000014 91A9 LD R26, Y+
\ 00000016 91B9 LD R27, Y+
\ 00000018 9508 RET
26 }

\ In segment INTVEC, offset 0x108, root
\ `??intproc??INTVEC 264`:
\ 00000108 ........ JMP intproc


Уже терпимо smile.gif

Цитата(Xenia @ Aug 11 2009, 13:34) *
Дык вышли давно такие версии: 5.20 и 5.30.


Я, кстати, имел в виду еще более новых. Я за обновлениями слежу.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Xenia
сообщение Aug 11 2009, 11:02
Сообщение #9


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Rst7 @ Aug 11 2009, 13:55) *
Я, кстати, имел в виду еще более новых. Я за обновлениями слежу.


А какая версия еще новее, чем EWAVR-5.30 ?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 11 2009, 11:05
Сообщение #10


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А какая версия еще новее, чем EWAVR-5.30 ?


Ждем новых версий.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
koljakh
сообщение Aug 11 2009, 11:08
Сообщение #11


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

Группа: Участник
Сообщений: 108
Регистрация: 14-07-09
Из: Украина, Киев
Пользователь №: 51 248



Цитата(Xenia @ Aug 11 2009, 12:48) *
Трудно сказать с уверенностью, т.к. в патче EWAVR-Patch-5.30.1.zip прислали экшенник iccavr.exe со всеми dll-библиотеками (голенькими, без инсталляции). Что там было изменено, без проверки судить нельзя.



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


Огромное спасибо, буду качать
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 11 2009, 11:11
Сообщение #12


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Огромное спасибо, буду качать


Можете не торопиться. Только что проверил, накатив патчи. Один хрен. Так что пока способ борьбы - это описанный мною выше.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
koljakh
сообщение Aug 11 2009, 11:25
Сообщение #13


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

Группа: Участник
Сообщений: 108
Регистрация: 14-07-09
Из: Украина, Киев
Пользователь №: 51 248



Цитата(Rst7 @ Aug 11 2009, 12:55) *
Это не баг, а недоделка. Не доделана.

Но это не повод сильно материться. Только что глянул и придумал способ.

Ставим в версии 5.30 тип проца ATxmega128A3, в ATxmega128A1.h патчим проверку модели
Код
#if TID_GUARD(6)
//#error This file should only be compiled with iccavr or aavr whith processor option -v6
#endif /* TID_GUARD(6) */


И инклудим напрямик ioxm128a1.h, а не ioavr.h

Результат:
CODE

#include "ioxm128a1.h"
#include "stdafx.h"

#pragma optimize=no_inline
__x_z void mcpy(UINT8 *d, UINT8 *s, UREG c)
{
do
{
*d++=*s++;
}
while(--c);
}

volatile UINT32 cnt;

#pragma vector=PORTA_INT0_vect
__interrupt void intproc(void)
{
cnt++;
}

int main( void )
{
mcpy((UINT8*)1234,(UINT8*)5678,124);
return 0;
}

CODE

1 #include "ioxm128a1.h"
2 #include "stdafx.h"
3
4 #pragma optimize=no_inline

\ In segment FARCODE, align 2, keep-with-next
5 __x_z void mcpy(UINT8 *d, UINT8 *s, UREG c)
\ mcpy:
\ ??mcpy_0:
6 {
7 do
8 {
9 *d++=*s++;
\ 00000000 9111 LD R17, Z+
\ 00000002 931D ST X+, R17
10 }
11 while(--c);
\ 00000004 950A DEC R16
\ 00000006 F7E1 BRNE ??mcpy_0
12 }
\ 00000008 9508 RET
13

\ In segment NEAR_Z, align 1, keep-with-next
\ 00000000 REQUIRE `?<Segment init: NEAR_Z>`
14 volatile UINT32 cnt;
\ cnt:
\ 00000000 DS8 4
15
16 #pragma vector=PORTA_INT0_vect

\ In segment FARCODE, align 2, keep-with-next
17 __interrupt void intproc(void)
\ intproc:
18 {
\ 00000000 93FA ST -Y, R31
\ 00000002 93EA ST -Y, R30
\ 00000004 934A ST -Y, R20
\ 00000006 933A ST -Y, R19
\ 00000008 932A ST -Y, R18
\ 0000000A 931A ST -Y, R17
\ 0000000C 930A ST -Y, R16
\ 0000000E B74F IN R20, 0x3F
19 cnt++;
\ 00000010 .... LDI R30, LOW(cnt)
\ 00000012 .... LDI R31, (cnt) >> 8
\ 00000014 8100 LD R16, Z
\ 00000016 8111 LDD R17, Z+1
\ 00000018 8122 LDD R18, Z+2
\ 0000001A 8133 LDD R19, Z+3
\ 0000001C 5F0F SUBI R16, 255
\ 0000001E 4F1F SBCI R17, 255
\ 00000020 4F2F SBCI R18, 255
\ 00000022 4F3F SBCI R19, 255
\ 00000024 8300 ST Z, R16
\ 00000026 8311 STD Z+1, R17
\ 00000028 8322 STD Z+2, R18
\ 0000002A 8333 STD Z+3, R19
20 }
\ 0000002C BF4F OUT 0x3F, R20
\ 0000002E 9109 LD R16, Y+
\ 00000030 9119 LD R17, Y+
\ 00000032 9129 LD R18, Y+
\ 00000034 9139 LD R19, Y+
\ 00000036 9149 LD R20, Y+
\ 00000038 91E9 LD R30, Y+
\ 0000003A 91F9 LD R31, Y+
\ 0000003C 9518 RETI
21

\ In segment FARCODE, align 2, keep-with-next
22 int main( void )
\ main:
23 {
\ 00000000 93BA ST -Y, R27
\ 00000002 93AA ST -Y, R26
24 mcpy((UINT8*)1234,(UINT8*)5678,124);
\ 00000004 E70C LDI R16, 124
\ 00000006 E2EE LDI R30, LOW(5678)
\ 00000008 E1F6 LDI R31, (5678) >> 8
\ 0000000A EDA2 LDI R26, LOW(1234)
\ 0000000C E0B4 LDI R27, (1234) >> 8
\ 0000000E .... RCALL mcpy
25 return 0;
\ 00000010 E000 LDI R16, 0
\ 00000012 E010 LDI R17, 0
\ 00000014 91A9 LD R26, Y+
\ 00000016 91B9 LD R27, Y+
\ 00000018 9508 RET
26 }

\ In segment INTVEC, offset 0x108, root
\ `??intproc??INTVEC 264`:
\ 00000108 ........ JMP intproc


Уже терпимо smile.gif



Я, кстати, имел в виду еще более новых. Я за обновлениями слежу.



Спасибо, это уже другое дело. Люблю я напильником компиляторы шлифовать smile.gif

Цитата(Rst7 @ Aug 11 2009, 13:11) *
Можете не торопиться. Только что проверил, накатив патчи. Один хрен. Так что пока способ борьбы - это описанный мною выше.


Ща попробую, получается что все-таки тип проца другой у младшего семейства, это радует smile.gif
А не скажите, где свойства проца находятся в каком-нить XML? Если добавить еще один файл, ну что-бы красиво было, типа ATXMEGA128A1_MY smile.gif
Go to the top of the page
 
+Quote Post
aesok
сообщение Aug 11 2009, 11:27
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(koljakh @ Aug 11 2009, 15:18) *
Спасибо, это уже другое дело. Люблю я напильником компиляторы шлифовать smile.gif


Выкинте в корзину этот совет, вы получите нерабочий код, у mega и xmega разный порядок обращения к байтам в 16-битных SFR.

Анатолий.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 11 2009, 11:29
Сообщение #15


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Выкинте в корзину этот совет, вы получите нерабочий код, у mega и xmega разный порядок обращения к байтам в 16-битных SFR.


Да ну? Читать надо внимательнее:
Цитата
Ставим в версии 5.30 тип проца ATxmega128A3


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

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

 


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


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