I want to run a function (hw_InitLL()) that resides in Program Code from Bootloader .
What i did to accomplish this
in linker files of both program and bootloader :
m_hw_InitLL (RX) : ORIGIN = 0x000020C0, LENGTH = 0x00000200
/* The HwInit code goes first into INTERNAL_FLASH */
} > m_hw_InitLL
in Program code :
void hw_InitLL(void) __attribute__((section(".hw_InitLL")));
// do some hw initialisation
// in this example i return without any other code
if i check the linker output after building both projects, i see function InitLL at address 0x20C0 which i wanted.
When i run hw_InitLL(); in program code, then it executes fine as expected. U can see assembly and memory content in this prtscr
in BL code :
When i run ((void (*) (void)) 0x000020C0) (); , then it jumps to addess 0x20C0 as expected. i can see the memory content is the same, but there are other assembly instructions in disassembly window (see prtscr). When i step further i run into a hardware fault
I did use a HardwareFault component in processor expert. This gives me stacked_lr : 5159 -> "Unable to retrieve disassembly data from backend".
Why do i see the same memory content but is codewarrior not able to show these as assembly instructions?
Why do i run into a hardwarefault?
Is there any way to execute that piece of code from 2 different places?
I will tell u why this is so important .. I want to use my BL in different hardware. When for example i use hardware with different ports assigned to different functions , like controlling a motor, i dont want the ports in an unitialized stated during the time needed to update the firmware.
So what i do is this -> Program code gets instruction to update firmware -> write an update flag in Eflash -> reset -> BL starts and run hw_InitLL() (must run from program code) -> BL erase flash and update with new program
I appreciate anyone's help very much.