ATmega128 (IAR vs GCC)

Do you have a question? Post it now! No Registration Necessary

Threaded View
Hi All!

Я далек от религиозных споров, поэтому хотелось бы услышать дельный совет.

Есть готовый дивайс, под который написана программка, компилирующаяся IAR C.
Однако, по некоторым причинам (что не важно для данного вопроса), нужно ее
перебилдить под avrgcc. Саму программку я довел почти до ума - она
собирается, но без поддкржки eeprom (что пока не так важно, вместо него
сейчас используется ram). Hо при заливке и запуске проги, она где-то
вешается, так как, возможно, не получает ответа по прерыванию от UART.

Кто писал на IAR и gcc посоветуйте, плиз, может там грабли какие есть с
обработкой прерываний или еще чего-то?

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

версия от IAR

16          SIGNAL(SIG_OVERFLOW0)           // 1.02 ms //2.04ms
17          {
\   __nearfunc __interrupt void SIG_OVERFLOW0();
\                     SIG_OVERFLOW0:
\   00000000   93FA ST -Y,R31
\   00000002   93EA ST -Y,R30
\   00000004   933A ST -Y,R19
\   00000006   932A ST      -Y,R18
\   00000008   931A ST      -Y,R17
\   0000000A   930A ST      -Y,R16
\   0000000C   B72F IN      R18,0x3F
\   0000000E   B73B IN      R19,0x3B
\   00000010   E000 LDI     R16,0
\   00000012   BF0B OUT     0x3B,R16
18 TCNT0 = 0x00;
\   00000014 E000 LDI     R16,0
\   00000016 BF02 OUT 0x32,R16


версия от gcc

SIGNAL(SIG_OVERFLOW0)           // 1.02 ms //2.04ms
{
2e98:       1f 92           push    r1
2e9a:       0f 92           push    r0
2e9c:       0f b6           in      r0, 0x3f        ; 63
2e9e:       0f 92           push    r0
2ea0:       11 24           eor     r1, r1
2ea2:       8f 93           push    r24
2ea4:       9f 93           push    r25
TCNT0 = 0x00;
2ea6:       12 be           out 0x32, r1        ; 50


Что за in r19,0x3b в IAR'овском варианте? Если есть в доках, то подскажите
секцию какой доки читать до просветления. Так же приветствуются ссылки на
работающие исходники под gcc.

--
With best regards,
Andy Shevchenko.      mailto: snipped-for-privacy@smile.org.ua



Re: ATmega128 (IAR vs GCC)
13-Jan-04 21:54 Andy Shevchenko wrote to All:

AS> сейчас используется ram). Hо при заливке и запуске проги, она где-то
AS> вешается, так как, возможно, не получает ответа по прерыванию от UART.
 А как оно сделано? Обработчик выставляет какие-то флаги?
А они объявлены volatile?
Если нет - то gcc запросто закеширует флаг в регистре и будет проверять до
посинения.

AS> \   0000000E   B73B IN      R19,0x3B
AS> \   00000010   E000 LDI     R16,0
AS> \   00000012   BF0B OUT     0x3B,R16

AS> Что за in r19,0x3b в IAR'овском варианте? Если есть в доках, то подскажите
AS> секцию какой доки читать до просветления.

Ищи в доках регистр RAMPZ.

wbr,
--
/* Oleksandr Redchuk, Brovary, Ukraine */
/* real '\x40' real '\x2E' kiev '\x2E' ua     */


Site Timeline