程序代码相关困惑

2019-07-20 12:13发布

[mw_shl_code=c,true]//跳转到应用程序段 //appxaddr:用户代码起始地址. void iap_load_app(u32 appxaddr) { if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法. { jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址) MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址) jump2app(); //跳转到APP. } } [/mw_shl_code]
在原子IAP实验中为什么要检查栈顶地址是否合法,而且地址要与0X2FFE0000相与呢??????
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
zc123
1楼-- · 2019-07-21 04:23
 精彩回答 2  元偷偷看……
wengxh642
2楼-- · 2019-07-21 10:15


1、对照着个框图已经开始明白了,但有个疑问就是栈顶地址范围是不是就sram范围,比如stm32f103zet6 64KB,按照你所说(*(vu32*)appxaddr)就是指针里面的数据,对照框图就是栈顶地址,而跟0x2ffe0000相与判断有没有在sram内存地址范围内,sram地址范围与栈顶地址是什么关系?????2、 MSR_MSP(*(vu32*)appxaddr);     //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址),在初始化中app中是不是有开辟了一个栈顶地址,也就是说在只有一个IAP和APP情况下,有两个栈顶地址,APP栈顶地址进行偏移,但原子款图中并没有两个栈顶地址指示?????
wengxh642
3楼-- · 2019-07-21 12:54
回复【8楼】zc123:
---------------------------------
能不能回答下8楼的问题???
zc123
4楼-- · 2019-07-21 15:13
 精彩回答 2  元偷偷看……
qilima
5楼-- · 2019-07-21 17:22
本帖最后由 qilima 于 2017-9-1 15:47 编辑
wengxh642 发表于 2015-10-11 12:36
1、对照着个框图已经开始明白了,但有个疑问就是栈顶地址范围是不是就sram范围,比如stm32f103zet6 64KB ...

IAP和APP的RAM是怎么分配的?我看用的是两个独立的栈,那堆也是独立的吗?如果IAP使用RAM过多,那APP能够使用的就少了,对吗?

一周热门 更多>