I have few queries regarding ARM Cortex boot sequence. I am using Keil mdk-5 with tm4c123gh6pm Microcontroller. While going through assembly startup (startup_xx.S) code, the following sequence is given.
Reset_Handler -> SystemInit ->__main
From Disassembly of source code, from bellow image
and from ARM Compiler C Library Startup and Initialization, the sequence after __main is as follow:
__main -> __rt_entry -> __user_setup_stackheap() -> __rt_stackheap_init() ..... main()
My questions are:
1) Why SystemInit which is a C-funtion, may require stack, is called before even stack and heap are initialized (__rt_entry initialize stack as above function calls).
1)
SystemInit
2) where can i find the implementation of __rt_entry,__user_setup_stackheap(), __rt_stackheap_init() functions. some of them are declared in rt_misc.h in Keil ARMCC but couldn't find their definitions.
2)
__rt_entry,__user_setup_stackheap(), __rt_stackheap_init()
rt_misc.h
Keil ARMCC
3) which C-library does keil uses by default, although there is an option for MicroC which is not the default one.
Thanks Joseph Yiu. default may be libc.
Regarding 3)
If MicroLib is not selected, it will be a full standard C library (there isn't a special name for it). Overview of the Microlib can be found in
http://www.keil.com/arm/microlib.asp
1) Cortex-M sets up a stack pointer upon reset. At least it loads start address and stackpointer value from 0 and 4. So it is your (or the linker's) responsibility to point this value to RAM. Therefore: SystemInit has a stack to use.
2) Check library sources. There aren't, so maybe a license issue.
3) Check the map file.
View all questions in Cortex-A / A-Profile forum