- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【精选】IAP升级功能编写初期的一些困惑与疑问---完成功能后的总结 - 推酷
推酷
文章
站点
主题
公开课
活动
客户端 荐
周刊
编程狂人
设计匠艺
一周拾
更多
讨论区
关于我们
搜索
IAP升级功能编写初期的一些 登录
困惑与疑问完成功能后的总结
时间 2014-06-18 16:46:58 CSDN博客
原文 /super_demo/article/details
主题 技术
一,网上下载的例程,跳转部分的代码有差异,尤其是用的汇编那句
eg:
①Jump_To_Application = (pFunction)(*(vu32*) (IAPSTART + 4));
__MSR_MSP(*(vu32*) IAPSTART);
Jump_To_Application();
跟踪__MSR_MSP(一般这个函数都在库文件里有,跟踪不到就用搜索找)找到汇编函数为
__MSR_MSP
MSR MSP, r0 ; set Main Stack value
BX r14
②//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
if(((*(vu32*)appxaddr)0x2FFE0000)==0//检查栈顶地址是否合法.
{
jump2app=(iapfun)*(vu32*)(appxaddr+4);//用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(vu32*)appxaddr);//初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地
址)
jump2app();//跳转到APP.
}
}
跟踪MSR_MSP找到函数为
//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0//set Main Stack value
BX r14
}
③
//判断用户是否已经下载程序,因为正常情况下此地址是栈地址。
//若没有这一句的话,即使没有下载程序也会进入而导致跑飞。
if (((*(__IO uint32_t*)ApplicationAddress) 0x2FFE0000 ) == 0
{
SerialPutString(Execute user Program\r\n\n);
//跳转至用户代码
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) JumpAddress;
//初始化用户程序的堆栈指针
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
Jump_To_Application();
}
跟踪 __set_MSP 找到函数为
__ASM void __set_MSP(uint32_t mainStackPointer)
{
msr msp, r0
bx lr
}
总结以上发现都是操作ARM的R0跟R14(LR)寄存器。
还有一种不太一样的,就是stm32F4的库函数中的跳转,如下所示
④
//测试用户app地址是不是在APPLICATION_ADDRESS位置。检测栈顶的地址,来检验app是否下
载成功
if (((*(__IO uint32_t*)APPLICATION_ADDRESS) 0x2FFE0000 ) == 0
{
//APPLICATION_ADDRESS + 4对应的是app中断向量表的第二项,复位地址
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
//把地址强转为函数指针
Jump_To_Application = (pFunction) JumpAddress;
//设置主函数栈指针
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
//调用函数,实际失去app复位地址去执行复位操作
Jump_To_Application();
}
跟踪 __set_MSP 找到函数为
static __INLIN
您可能关注的文档
- 【精选】AutoCAD2012破解图解安装教程.doc
- 【精选】Aviator-2.3.0用户指南.pdf
- 【精选】AutoCAD的一些问题技巧.pdf
- 【精选】AV发烧入门 家庭影院的组成及其设计.doc
- 【精选】AXE534124;AXE580124;AXE660124;AXE570124;AXE540124;中文规格书,Datasheet资料.pdf
- 【精选】AX601_AX605_AX651_市场应用_7_Dec _2012-12-11.pdf
- 【精选】AZ431.pdf
- 【精选】AXK724147G;AXK824145WG;AXK850145WG;AXK734147G;AXK834145WG;中文规格书,Datasheet资料.pdf
- 【精选】A北师大版九年级下册历史复习提纲.doc
- 【精选】A组 百度贴吧.doc
- 【精选】ICU常见呼吸疾病的胸片表现.ppt
- 【精选】ICU特殊药物使用流程.doc
- 【精选】iData_关于中铁大桥局集团公司项目党建工作的调查与思考_周秀芸.pdf
- 【精选】IEEE 80211 MAC帧服务时延分析和在拥塞控制中的应用.pdf
- 【精选】IEMS视频动作分析应用改善浅析.pdf
- 【精选】I can Swim 课件 --董珍珍.ppt
- 【精选】if-she-goes-to-a-different-school,-i-won’t-see-my-best-friend课件.ppt
- 【精选】if-you-go-to-the-party,-you’ll-have-a-great-time课件7.ppt
- 【精选】Illustrator(AI)与Affter Effects(AE)结合制作藤蔓,漩涡动画.pdf
- 【精选】IMA-W喷吹支管堵塞检测仪产品说明书-ZSD.doc
文档评论(0)