[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [avr-gcc-list] ATmega 2561 - compiler generates eicall
From: |
Stu Bell |
Subject: |
RE: [avr-gcc-list] ATmega 2561 - compiler generates eicall |
Date: |
Wed, 4 Jun 2008 08:30:11 -0600 |
Dang, it would help if I read the entire message.
Function pointers in the bootloader. I kept my bootloader
mind-bogglingly simple precisely to avoid problems like this.
Unfortunately, many folks have a need for a far more comples bootloader
than I need.
Since the eicall is being used, why not force EIND to 1 at the beginning
of your code...
asm volatile ( "ldi r24, 0x01 \n\t"
"out 0x3C, r24 \n\t"
);
Worth a shot, eh?
Best regards,
Stu Bell
DataPlay (DPHI, Inc.)
-----Original Message-----
From: address@hidden
[mailto:address@hidden On Behalf Of
Dusan Ferbas
Sent: Tuesday, June 03, 2008 5:36 PM
To: address@hidden
Subject: [avr-gcc-list] ATmega 2561 - compiler generates eicall
Hi,
I am using WinAVR-20071221, because none of the most recent toolchains
produces a runnable code for our application.
Our bootloader starts at 0x3f800 (2kB).
In its code, we are using function[id](...) construction.
This is compiled with eicall instruction, but no EIND register is set.
Is there a way, how to tell the compiler, that code is linked in upper
half of flash ?
In bootloader code we can live with EIND=1 at its init.
But when we have a call from our application, neither EIND is set, even
address is not divided by 2 (WinAVR bug #1959227).
Probably some far attribute should be applied ?
When compiled for ATmega128 (with 0x1f806), it works ...
typedef void boot_loader_init(unsigned char *);
#define boot_loader_data_init ((boot_loader_init *)0x3F806)
...
boot_loader_data_init(buffer);
...
Dusan
_______________________________________________
AVR-GCC-list mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list
Message not available