In general (i.e. untested ;) you'd add a linker script snippet like
this:

section_TAO 0xC400 : {
  *(.myfuncsec_TAO)
}

Then tag your function with a section attribute:

static void __interrupt __attribute__((section(".myfuncsec_TAO")))
Timer0_A0_alter(void)
{
}


The key here is that you can change the section a function (or
anything, like data or tables) is in, and the linker knows how to put
specific sections at specific addresses.

Note that this only works if *other* output sections in the link do
not overlap.  I typically avoid the examples above, and instead use
memory regions, that way I know they won't overlap or overflow.

MEMORY {
        MYFUNCSEC (r) : ORIGIN = 0x0c400, LENGTH = 0x00400
}

section_TAO : {
  *(.myfuncsec_TAO)
} > MYFUNCSEC


Note that you can also do per-file placement, by replacing the '*' wildcard
with the file name you want:

section_TAO {
  int_a0.o(.text)
} > MYFUNCSEC

but if there are other .text things in that object that you're not
aware of, that won't guarantee that the specific handler is at the
address you want.

------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to