Part Number: MSP432P4111
Hello,
I've created an application for the MSP432 that allows multiple versions of software to be programmed to different parts of the FLASH memory.
The software will check a variable set in the FRAM after regular initialization, and if a certain flag is set. It will jump to the entry point of a different piece of software in the flash (different bank).
For this jump I use the new software start_address + 4 in order to jump to the ResetHandler entry in the interrupt vector of the new software. (e.g. (uint32_t*)(0x100000 + 4) );
The resetHander subsequently sets the new VTOR and continues regular initialization (__asm(" .global _c_int00\n" " b.w _c_int00"); )
On the MSP432P401R device, I've used this method in the past and have yet to see any problems and the jump is basically immediate, however on the P4111 module, this jump takes much longer, and I've had specific cases where this jump takes ±25 seconds. I did more investigation and found that replacing _c_int00 with _c_int00_noinit will make this jump basically instantaneous again. However, this change will cause the global variables above my main function to not initialize anymore and run their respective constructor, which will cause different problems within my application. (major difference in these two initialization routines is the execution of __TI_auto_init )
Is there a solution to make the initialization routine _c_int00 faster like during a coldboot? or is the easiest mitigation to move the constructor functions into initialization functions in the main loop?
Thank you so much in advance,
Casper