hi, i use frdmk64f with cw 10.6, mqx 4.1.
i want to do a bootloader using mqx OS. my question is: before i jump from the bootloader to the application how can i deinitialize (or close) mqx (or other peripheral automaticallhy started)?
i use the same code for application and the bootloader: the example gpio modified. the different is:
application: started from address 0x000C0000, use vector_ram, and blinking led1
bootloader: started from address 0x00000000, use vector_rom, blinking led2 and do the jump.
jump function:
extern void preparation_application(void)
{
SCB_VTOR = 0x1fff0000;
asm volatile("cpsid i");
_int_disable();//i dont know which is better to use for interrupt disabling
}
extern void start_application(unsigned long app_link_location)
{
asm(" ldr sp, [r0,#0]"); // load the stack pointer value from the program's reset vector
asm("mov lr, #0xffffffff");//asm("mov sp, r0");
asm(" ldr pc, [r0,#4]");// load the program counter value from the program's reset vector to cause operation to continue from there
}
i know that i set the linker file for the application correctly because if i build a simple file with only the istruction for the jump i can se that the application run well.
the problem is when i run the bootloader code. in debug mode i can see that the jump is done correctly. load the sp and the pc from the correct location. but at certain point the code come back to the bootloader and run in this infinite loop.
so i think that i don't do correctly the deinitialization of the bootloader before the jump.
i try to use the function _mqx_exit(0) but somethings go wrong and it do not come back at the main application that call _mqx().
thank you