if (((*(volatile uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
{
JumpAddress = *(volatile uint32_t*)(ApplicationAddress + 4);
Jump_To_Application = (pFunction)JumpAddress;
__set_MSP(*(volatile uint32_t*)ApplicationAddress); //初始化用户程序的堆栈指针
Jump_To_Application();
}
ApplicationAddress 是你要跳转的那个代码存放的首地址,我代码里是
#define ApplicationAddress1 0x08008000 //应用程序起始地址
JumpAddress = *(volatile uint32_t*)(ApplicationAddress + 4); 这句话的意思执行的结果是,打开bin文件偏移四个字节后的一个uint32数据,具体是为什么取这个数,对bin文件感兴趣的朋友可以自己研究一下。如果你这段代码实在不理解,不过没关系,你只需要添加进去就行了,呵呵
0x08000000 -----------------------------------------
|
| 程序1
|
|
0x08008000 -----------------------------------------
|
|
| 程序2
|
|
-----------------------------------------
程序1和我们普通的代码一样不需要设置中断偏移量,工程选项也不需要设置,程序2需要设置,设置流程如下:
将里面原来的数据0x8000000改为0x8008000,不一定非要是这个,我只是害怕小了重叠,官网给的是 0x8004000,
同时在你的代码里加上中断偏移设置为0x8000
#ifdef VECT_TAB_RAM
// Set the Vector Table base location at 0x20000000
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
// Set the Vector Table base location at 0x08000000
//NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);
#endif
二、bin文件的生成
更多回帖