OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3726|回复: 1

关于stm32f4的IAP升级例程中

[复制链接]

27

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
225
金钱
225
注册时间
2015-12-17
在线时间
44 小时
发表于 2016-4-29 09:31:28 | 显示全部楼层 |阅读模式
1金钱
不太明白下边这个函数/跳转到应用程序段//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)//检查栈顶地址是否合法.
{
jump2app=(iapfun)*(vu32*)(appxaddr+4);
//用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(vu32*)appxaddr);
//初始化 APP 堆栈指针(用户代码区的第一个字用于存放栈顶地址)
jump2app();  //跳转到 APP.
}
}



为什么要判断(*(vu32*)appxaddr)&0x2FFE0000)是否为0x20000000呢?这是怎么得到的  ,栈顶值为什么是这个














最佳答案

查看完整内容[请看2#楼]

对于128k SRAM的单片机来说,ram地址范围为 0x20000000~0x2001FFFF,上面的判断只是确保堆栈指针在有效ram地址范围之内
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

92

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1056
金钱
1056
注册时间
2015-5-12
在线时间
208 小时
发表于 2016-4-29 09:31:29 | 显示全部楼层
对于128k SRAM的单片机来说,ram地址范围为 0x20000000~0x2001FFFF,上面的判断只是确保堆栈指针在有效ram地址范围之内
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 02:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表