//=====================================================================
//文件名称：bootloader.cpp
//功能概要：bootloader构件源文件
//=====================================================================

#include "projectJump.h"

typedef void (*pFunction)(void);  //指向用户程序复位中断

//======================================================================
//函数名称：projectJump
//函数参数：app_start_addr:跳转工程首地址
//函数返回：无
//功能概要：从当前工程跳转到其他工程继续运行。这里主要用于从BIOS工程跳转User工程
//======================================================================
void projectJump(vuint_32 app_start_addr)
{
	//（1）变量声明
    volatile pFunction jump_to_application;  //函数指针
    uint_32 jump_addr;

    jump_addr = *(volatile uint_32*)(app_start_addr + 4);  //RESET中断

    //app_start_addr地址需在
    extern uint_32 __etext[];  //工程代码的最后位置

    //两个工程flash代码一定不会重合
    if(app_start_addr > (vuint_32)__etext)
    {
    	jump_to_application = (pFunction)jump_addr;

        __set_MSP(*(vuint_32*)app_start_addr); //设置主栈

        jump_to_application();  //跳转用户程序
    }
}
