2020-07-12 11:40 PM
i have flashed RTOS firmware at location 0x8000000. i have another firmware(led blink) at location 0x8001e00. i am unable to jump from 0x8001e00 to 0x8000000 location. but i am able to jump from 0x8000000 to 0x8001e00(led bllink) and it is working.
please suggest.
2020-07-13 12:30 AM
NVIC_SystemReset() should do the trick.
2020-07-13 12:32 AM
NVIC_SystemReset() is not working in my case. that is why i am using jump for that.
2020-07-13 12:40 AM
So neither a jump nor a software reset works, what does work then?
2020-07-13 12:46 AM
working conditions:
answer to the Q
2020-07-13 12:55 AM
And what happens when you jump to the application at 0x08000000?
What address should it jump to, where does it jump to instead?
By the way, how do you jump to it?
What are the first 8 bytes at 0x08000000?
2020-07-13 01:06 AM
there is two different firmware available in flash .
below are the codes which is used for jump:
#define PROJ1_FLASHADDR 0x08000000U
#define PROJ2_FLASHADDR 0x0801E000U
__disable_irq();
/* Get the main application start address */
uint32_t jump_address = *(__IO uint32_t *)(PROJ1_FLASHADDR + 4);
/* Set the main stack pointer to to the application start address */
__set_MSP(*(__IO uint32_t *)PROJ1_FLASHADDR);
/* Create function pointer for the main application*/
void (*pmain_app)(void) = (void (*)(void))(jump_address);
/* Now jump to the main application*/
pmain_app();
2020-07-13 01:07 AM
after jumping at location 0x08000000. firmware getting stuck.
may be program counter is not increasing(just guess)
2020-07-13 01:26 AM
Where does the above code actually jump to?
What are the first 8 bytes at 0x08000000?
You disable interrupts with __disable_irq(), does the other application enable them?
2020-07-13 01:56 AM
below are details of first 8 byte :
after jump when i am trying to enable irq in called firmware then system is not reponding.