IAP的例子里void iap_load_app(u32 appxaddr)函数中

2019-08-21 12:21发布

IAP的例子里void iap_load_app(u32 appxaddr)函数中if  (     (  (*(vu32*)appxaddr)&2FFE0000)==0X2000 0000  ) //检查栈顶地址是否合法
想问下&2FFE0000这个数字是什么含义,0x2000 0000大概是片上内存地址.
向大家请教了,在原子教你玩stm32(库函数版本)503面
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
szczyb1314
1楼-- · 2019-08-21 17:43
0x2000 0000是片上ram的起始地址,(     (  (*(vu32*)appxaddr)&2FFE0000)==0X2000 0000  )判断你的栈顶地址是不是在ram的地址范围内,有没有超范围
richthoffen
2楼-- · 2019-08-21 22:54
szczyb1314 发表于 2017-4-15 12:34
0x2000 0000是片上ram的起始地址,(     (  (*(vu32*)appxaddr)&2FFE0000)==0X2000 0000  )判断你的栈顶地 ...

&2FFE0000  是什么意思啊按位与2FFE0000,不懂这个,向你请教了谢谢
szczyb1314
3楼-- · 2019-08-22 01:59
richthoffen 发表于 2017-4-15 12:37
&2FFE0000  是什么意思啊按位与2FFE0000,不懂这个,向你请教了谢谢

你想啊,在FFE的位置上出现1,与之后是不是就不是20000000了
在这些个位置上出现1其实就是地址超出范围了。
如果你的RAM是64K的话,你写个2fff0000也行,现在写个2ffe0000是128k的ram地址,范围是20000000-2001ffff,你在这个128k的地址范围内相与都不会报错。
richthoffen
4楼-- · 2019-08-22 06:27
szczyb1314 发表于 2017-4-15 12:54
你想啊,在FFE的位置上出现1,与之后是不是就不是20000000了
在这些个位置上出现1其实就是地址超出范围 ...

谢谢你说的我都明白了,谢谢,我现在还有点疑惑的是,前面有*(vu32*)就会将地址(就是appxaddr)&2FFE0000变为地址存放的值&2FFE0000,这个位置有点不懂.
szczyb1314
5楼-- · 2019-08-22 06:35
 精彩回答 2  元偷偷看……
richthoffen
6楼-- · 2019-08-22 06:40
szczyb1314 发表于 2017-4-16 10:17
*(vu32*)appxaddr具体是:
1.先将appxaddr强制类型转换为vu32类型的指针,
2.然后最前面的*是指这个指针 ...

从哪里可以知道0x8010000地址里存放的还是地址,这个知识点我不知道,麻烦你了.

一周热门 更多>