Hi @NeoMinh
I think that there are several aspects that we could check, this is in general:
From the bootloader side, I think that you could check the following recommendations from this ARM post: How to write a bootloader. Prior to performing jump to the application there are additional steps like clearing pending NVIC interrupts, load the vector address of the user application, make sure the CPU is in privileged mode etc.
From the core perspective , try to diagnose which hard fault and exceptions , you are possibly getting, as this are common reasons that stop an application to run. There is a guide from FreeRTOS : Debugging Hard Fault & Other exceptions and other in the community Tracking down hard faults
And , from the application image, review if the FreeRTOS and your current application , does not require any special setting for memory, more memory resources , memory alignment etc. Try to debug and step down into the last function that is able to run the MCU. Also, try to load simple image with a Blinky ( at 0x40000 too) with no FreeRTOS, and see if it is able to run as expected.
Please accept my apologies for the delay.
I hope this could help.
Diego.