Hi Jason,
Let's me make it more clearly.
First of all, you can find the BL_TARGET_FLASH is defined as the Fig 1 shows.
For jump the jump the second application, at first, you should add another application address in the bootloader_config.h, meanwhile add another application vector table in the vector_table_info.h too as below.
Next, in the get_user_application_entry() and jump_to_application() functions, you should add if-else to select which application to jump as below.
The linker file also need to be modified for the jumping successful and I've attached an application note, in this application note, you can learn the way of modifying linker file.
Have a great day,
Ping
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

Fig 1
// The bootloader will check this address for the application vector table upon startup.
#if !defined(BL_APP_VECTOR_TABLE_ADDRESS)
#define BL_APP_VECTOR_TABLE_ADDRESS 0xa000
#define BL_Second_APP_VECTOR_TABLE_ADDRESS 0x2a000
#endif
#if (BL_TARGET_FLASH)
//! @brief Pointer to the application vector table, which is always at the
//! end of the bootloader region in flash.
#define APP_VECTOR_TABLE ((uint32_t *)BL_APP_VECTOR_TABLE_ADDRESS)
#define Second_APP_VECTOR_TABLE ((uint32_t *)BL_Second_APP_VECTOR_TABLE_ADDRESS)
#else
//! @brief Pointer to the bootloader vector table, which is always at address 0.
#define APP_VECTOR_TABLE ((uint32_t *)kDefaultVectorTableAddress)
#endif
static void get_user_application_entry(uint32_t *appEntry, uint32_t *appStack)
{
assert(appEntry);
assert(appStack);
#if BL_TARGET_RAM
*appEntry = NULL;
*appStack = NULL;
#else
if(SW is active)
*appEntry = APP_VECTOR_TABLE[kInitialPC];
*appStack = APP_VECTOR_TABLE[kInitialSP];
else
*appEntry = Second_APP_VECTOR_TABLE[kInitialPC];
*appStack = Second_APP_VECTOR_TABLE[kInitialSP];
#endif
}
static void jump_to_application(uint32_t applicationAddress, uint32_t stackPointer)
{
shutdown_cleanup(kShutdownType_Shutdown);
// Create the function call to the user application.
// Static variables are needed since changed the stack pointer out from under the compiler
// we need to ensure the values we are using are not stored on the previous stack
static uint32_t s_stackPointer = 0;
s_stackPointer = stackPointer;
static void (*farewellBootloader)(void) = 0;
farewellBootloader = (void (*)(void))applicationAddress;
// Set the VTOR to the application vector table address.
SCB->VTOR = (uint32_t)APP_VECTOR_TABLE;
if(SW is active)
SCB->VTOR = (uint32_t)APP_VECTOR_TABLE;
else
SCB->VTOR = (uint32_t)Second_APP_VECTOR_TABLE;
// Set stack pointers to the application stack pointer.
__set_MSP(s_stackPointer);
__set_PSP(s_stackPointer);
// Jump to the application.
farewellBootloader();
// Dummy fcuntion call, should never go to this fcuntion call
shutdown_cleanup(kShutdownType_Shutdown);
}