Re: Can the RESET_VECTOR be redefined at compile time to a specific value?

Michiel Konstapel <[email protected]>
Newsgroups gmane.comp.hardware.texas-instruments.msp430.gcc.user
Message-ID <[email protected]>
You may be able to use the same approach TinyOS does, using some linker flags. An example for an msp430f1611:

CFLAGS += -Wl,--section-start=.text=0x4a00,--defsym=_reset_vector__=0x4000

So when compiling/linking the application, it moves the text segment up and defines the _reset_vector__ to point at the bootloader. You don't even need a separate linker script.

However, redefining __reset_vector_ apparently makes the compiler discard some symbols referenced from it, which are then manually added back in. The full sequence is:

CFLAGS += -Wl,--section-start=.text=0x4a00,--defsym=_reset_vector__=0x4000
# Pull back in mspgcc CRT code discarded by the redefinition of _reset_vector__
CFLAGS += -Wl,--undefined=__init_stack
CFLAGS += -Wl,--undefined=__low_level_init
CFLAGS += -Wl,--undefined=__do_copy_data
CFLAGS += -Wl,--undefined=__do_clear_bss
CFLAGS += -Wl,--undefined=__stop_progExec__
CFLAGS += -Wl,--undefined=_endless_loop__

HTH,
Michiel

> -----Original Message-----
> From: Tomek Lorek [mailto:[email protected]]
> Sent: Friday, April 18, 2014 19:09
> To: [email protected]
> Subject: [Mspgcc-users] Can the RESET_VECTOR be redefined at compile
> time to a specific value?
> 
> Hi,
> My use case is the following: I have a bootloader (up to 4K in size,
> residing at 0x4400 to 0x5400) that has a main() function and
> application (starting from 0x4800) – they are organized as 2 separate
> projects (I want the bootloader to be flashed only once and not
> changed later).
> 
> I am using mspgcc.
> 
> Bootloader and application linker scripts are defined so that their
> .text sections (that go to “rom” memory region) are separated but they
> use the same “vector” memory region for .vector section (although the
> bootloader does not use any interrupts other than reset):
> 
> bootloader’s linker script excerpt:
> MEMORY {
>   …
>   rom (rx)         : ORIGIN = 0x4400, LENGTH = 0x1000 /* END=0x5400,
> size 4K - bootloader code */
>   rom_app (rx)     : ORIGIN = 0x5400, LENGTH = 0xab80 /* END=0xff80,
> size 43904 - the field-updatable application */
>   vectors          : ORIGIN = 0xff80, LENGTH = 0x0080 /* END=0x10000,
> size 128 as 64 2-byte segments */
>   …
> }
> 
> and the application’s linker script excerpt:
> 
> MEMORY {
>   …
>   rom (rx)         : ORIGIN = 0x5400, LENGTH = 0xab80 /* END=0xff80,
> size 43904 */
>   vectors          : ORIGIN = 0xff80, LENGTH = 0x0080 /* END=0x10000,
> size 128 as 64 2-byte segments */
>   …
> }
> 
> I need the bootloader’s init code and main() function be executed upon
> power up of the microcontroller. And this would be the case if I only
> flash the bootloader’s .elf onto the flash (0xFFFE pointing to
> bootloader’s main() function).
> 
> But when I then program the application’s image onto the flash the
> 0xFFFE will point to the application’s reset vector which is not a
> bootloader anymore. I'd like to configure my application so that it
> always fills 0xFFFE with a fixed address (0x4400).
> 
> The rest of the story is that when bootloader is started then of
> course the bootloader needs to jump to and execute the application’s
> entry point (0x5400) including the app's watchdog preparation, stack
> init etc.
> 
> Is that doable? How can I define in the application’s code that the
> reset vector (0xFFFE) shall contain the bootloader’s init code
> (0x4400)?
> 
> Best Regards,
> Tomek
> 
> -----------------------------------------------------------------------
> -------
> Learn Graph Databases - Download FREE O'Reilly Book
> "Graph Databases" is the definitive new guide to graph databases and
> their
> applications. Written by three acclaimed leaders in the field,
> this first edition is now available. Download your free book today!
> http://p.sf.net/sfu/NeoTech
> _______________________________________________
> Mspgcc-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users
------------------------------------------------------------------------------
Start Your Social Network Today - Download eXo Platform
Build your Enterprise Intranet with eXo Platform Software
Java Based Open Source Intranet - Social, Extensible, Cloud Ready
Get Started Now And Turn Your Intranet Into A Collaboration Platform
http://p.sf.net/sfu/ExoPlatform
_______________________________________________
Mspgcc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mspgcc-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.