手机版

关于IAP与APP互相跳转的实现(2)

发布时间:2021-06-08   来源:未知    
字号:

5. 编写跳转IAP函数:

/**************************************************************************************************

函数: 运行IAP程序.

输入: 无

返回: 无.不再返回.

说明: 由于APP是在IAP的基础上运行的,因此,IAP一定是有效的,这里不再作IAP有效性检查.

**************************************************************************************************/

#define IAP_ADDR 0X08000000

void IapProgramRun(void)

{

INT32U IapSpInitVal; //IAP程序的SP初值.

INT32U IapJumpAddr; //IAP程序的跳转地址.即,IAP程序的入口.

void (*pIapFun)(void); //定义一个函数指针.用于指向APP程序入口.

NVIC_DeInit (); //恢复NVIC为复位状态.使中断不再发生.

IapSpInitVal = *(INT32U *)IAP_ADDR; //取APP的SP初值.

IapJumpAddr = *(INT32U *)(IAP_ADDR + 4); //取程序入口.

__MSR_MSP (IapSpInitVal); //设置SP.

pIapFun = (void (*)(void))IapJumpAddr; //生成跳转函数.

(*pIapFun) (); //跳转.不再返回.

}

6. 编写在一定条件下跳转IAP的部分。比如按下某个键,就跳到IAP去。

完成上述几步后,编译调试,用JLINK调试,可以直接运行的,跟你原来的工程应该没区别。有问题的话,将它解决。

第三步:制作您的IAP程序。

1. 将程序定位在0X08000000开始的位置。如果您的程序本来就是在这个位置

的,不用改了。

点魔术棒,打开目标选项设置。

选Target选项卡,IROM1改成从0X08000000开始,尺寸0X00010000;

Debug选项卡,Load Application at Startup打上勾,Run to main()打上勾;

Utilitiles选项卡,点settings按纽,弹出Flash download卡,Erase sectors

打上勾,点你的编程算法,将底下的的起始地址改成0X08000000,尺寸

0X00010000。

2. 为了从APP程序跳回来运行IAP的时候正常开始,初始化时要恢复RCC为

复位状态,恢复NVIC为复位状态。

在你的RCC初始化部分,第一句加上:

RCC_DeInit();

在你的NVIC初始化部分,第一句加上:

NVIC_DeInit ();

3. 重定位中断表到0X08000000位置。

在上面NVIC_DeInit ();后面加上:

NVIC_SetVectorTable (NVIC_VectTab_FLASH, 0x0);

关于IAP与APP互相跳转的实现(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)