Hi,
in June 2008, I discussed here calling a bootloader from an application.
Now, we recognized that this is a common problem with calling
functions with eicall instruction.
I was asked if I save regs properly etc.
This is not the issue.
Problem was, that once I set eind to 1, proper routine was called,
but at that time an interrupt occured and used another eicall, which
expected eind==0.
But eind was 1 at that time.
So our current solution is to have ints disabled while having eind=1.
Any other advice ?
Upcoming avr-gcc with fixing this ?
Is using trampolines described somewhere ?
------------
This problem is I think common, not only with a bootloader. Once
eicall is generated for a function in upper half flash, targeting
call is misplaced.
The easiest way should be to prepend eicall with eind setup and
linker should modify eind with 1 or 0.
Unless this is implemented instead of eicall, simpler icall is sufficient.
I like this 3 byte PC :-).
------------
I would like to hear from others with 256x applications how they are running ?
Can you check eicall instructions in your listings and report if all
targeting functions are in lower flash half ?
Anyone, who fixed this issue differently ?
At 12:14 30.6.2008, Dusan Ferbas wrote:
Hi guys,
we have 2 issues with eicall instruction on ATmega2561 platform.
1st is, that a call to a constant bootloader (BL) location is
compiled with eicall instruction without setting EIND register.
2nd is, that in BL area, indexed call /that is compiled with eicall/
seems not to work, when used from application area.
We tried both WinAVR-20071221 and WinAVR-20080610.
...
Dusan
_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list