我现在想做一个IAP的应用,想法是这样的,有一个IAP程序和一个APP程序,上电先从IAP程序运行,等待命令看是否要执行更新操作,如果执行更新操作,则下载.BIN文件到FLASH;如果不执行更新操作则跳转到APP部分执行。以上这些都能够执行,没有问题,现在的问题是在执行APP的时候也要判断是否更新APP程序命令,如果要更新则跳转到IAP部分,但是现在不能够从APP跳转到IAP。IAP部分的跳转如下:
#define ApplicationAddress 0x8003000
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
//跳转到用户程序
Jump_To_Application = (pFunction) JumpAddress;
//初始化用户程序的堆栈指针
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
下面这个是APP的设置中断向量表
//设置中断向量表的位置在 0x3000
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);
下面这个是APP部分的程序跳转(当接收到更新命令的时候执行)
#define IAP_Address 0x8000000
//跳转至IAP代码
JumpAddress = *(__IO uint32_t*) (IAP_Address + 4);
Jump_To_IAP = (pFunction) JumpAddress;
//初始化IAP程序的堆栈指针
__set_MSP(*(__IO uint32_t*) IAP_Address);
Jump_To_IAP();
我自己是个新手,所以想请各位版友帮我解决一下,根据我个人的推测,是在跳转到IAP部分的时候中断向量表出现问题,所以我试着在IAP里面设置一下中断向量表,但是不起作用。请香主和版友帮我解答一下。在线等... |