Hi David,

On Wed, Apr 30, 2014 at 8:49 AM, David Fernandez <dfernan...@solarflare.com>
wrote:
>
> Hi there (likely Joerg Wunsch will know this),
>
> In devices like ATxMega256xxx, I see that the C function tables I
> declare, and the function pointers, end up being 16-bit, and so-far
> everything seems to assume that EIND is 0 and functions will be in the
> first 64K (my current code is not that big yet).

The assembler uses word addresses, so a 16-bit entry can refer to 128K
So check the addresses from the linker map (which are byte addresses) and
compare those to what is stored. My recollection is that if you use
function pointers, then everything just works.

> Will avr-gcc use the right relocation when picking one function from the
> array and calling it? or should I declare the functions with some
> special attribute and/or do some assembler magic with gs() operator when
> calling those kind of functions.
>
> So far I see that gcc put some trampoline calls after the interrupt
> vectors for some functions, but everything fits within the first 64K so
far.
>
> I'm just trying to be sure that when code begin to fall off the first
> 64K, I'm not going to get funny problems a few weeks later, after I
> completely forgot about this thing.

I wrote an i2c bootloader for the 128, and I ran into some issues similar
to what you describe.

If you look in
http://svn.gumstix.com/gumstix-buildroot/branches/projects/robostix/i2c-BootLoader/vectors.Sat
jump_table, I declare 3 16-bit pointers into my bootloader.

Then, in this file:
http://svn.gumstix.com/gumstix-buildroot/branches/projects/robostix/Common/i2c-slave-boot.cThe
BootloaderJumpTable just contains ordinary function pointers. I copy
the jump table from flash into RAM in the I2C_SlaveBootInit function and
then just call through the function pointers to call into the bootloader.

I had to be able to copy data from anywhere in the flash, so I created an
addr32 macro that returns a 32-bit address of an arbitrary object in flash:
http://svn.gumstix.com/gumstix-buildroot/branches/projects/robostix/i2c-BootLoader/BootLoader.c
Search for addr32

Anyways, not exactly what you're looking for, but hopefully a few ideas to
help you along. Feel free to ask questions.

--
Dave Hylands
Shuswap, BC, Canada
http://www.davehylands.com
_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
https://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to