- 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升级功能编写初期的一些 登录
困惑与疑问完成功能后的总结
时间 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
您可能关注的文档
- ADF中文教程:ReaxFF模拟最简单范例(基本参数详解):398K下H2与F2摩尔比1比1反应.pdf
- AGV用超级电容与蓄电池混合储能设计_张勇.pdf
- AI-200F调焦-测试-点胶一体机.pdf
- AMB300说明书V12_0115_-注意事项.pdf
- Amesim R13 和 Adams 联合仿真设置教程和关键点(亲测).pdf
- APLAC PT002- 校准实验室间比对.pdf
- AR模型参数估计在股票预测中应用.pdf
- ASTM_A275__A275M_钢锻件磁粉检验标准试验方法-中文.pdf
- Autodesk Inventor 安装教程.pdf
- Autodesk Revit 初级工程师参考样题.pdf
最近下载
- 区域地质调查工作程序及工作方法.ppt VIP
- 盆底康复治疗ppt课件.pptx VIP
- 图形创意(第二版)林家阳 高教 全套课件.pptx VIP
- 2023年传媒项目综合评估报告.docx
- GB50487-2008 (2022年版) 水利水电工程地质勘察规范.pdf VIP
- 2024淄博市沂源县燕崖镇社区工作者招聘考试试题.docx VIP
- 儿童偏头痛的特点与治疗ppt课件.ppt VIP
- 2025年杭州钢铁集团有限公司校园招聘笔试备考题库及答案解析.docx VIP
- 2025-2026学年初中音乐沪教版2024七年级上册-沪教版2024教学设计合集.docx
- 2024浙江杭州钢铁集团有限公司招聘24人笔试备考题库及答案解析.docx VIP
文档评论(0)