关于IAP一些语句问题

2019-08-23 15:28发布

关于IAP方面的问题,if(((*(vu32*)appxaddr)&0xffe0000)==0x20000000)   我不太懂这个条件语句为什么是栈顶地址是否合法的判断,谁能解答解答一下?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
dozm
1楼-- · 2019-08-23 20:08
 精彩回答 2  元偷偷看……
mack13013
2楼-- · 2019-08-24 00:51
if(((*(vu32*)appxaddr)&0xffe0000)==0x20000000)
((*(vu32*)appxaddr)&0xffe0000)==0x20000000
appxaddr应该是个变量,看名字应该表示某个地址
然后(vu32*)appxaddr表示将appxaddr强制转换成vu32*类型,该类型是一个volatile 的无符号32长度(long)数据指针,
再然后(*(vu32*)appxaddr)表示取出指针指示的变量数值。
上面整体的说,就是将appxaddr这个变量中的数值作为地址,然后取出这个地址中的数值(要取32位,并且把这个取出的数值看作无符号的long型)。
再然后就是跟0xFFE0000与一下,看最后结果是否与0x20000000相等。

至于为什么说这条语句判断是否栈顶合法,这要看程序逻辑和MCU的地址分布了。语法上看不出什么来。
Roderick
3楼-- · 2019-08-24 04:26
dozm 发表于 2017-3-30 16:07
(vu32*)appxaddr 转换成地址,*(vu32*)appxaddr 取这个地址存的值,再与0xffe0000位与

这个我能理解,我大概不懂的是*(vu32*)appxaddr 这个地址存的值是什么??其次0x20000000是什么不太懂
Roderick
4楼-- · 2019-08-24 05:23
Roderick 发表于 2017-3-30 16:16
这个我能理解,我大概不懂的是*(vu32*)appxaddr 这个地址存的值是什么??其次0x20000000是什么不太懂

我懂了我懂了  谢谢
明**明
5楼-- · 2019-08-24 10:39
Roderick 发表于 2017-3-30 16:40
我懂了我懂了  谢谢

我还是不懂,函数传进来的地址是0x08010000的话,更好是IAP函数的起始地址,也就是取其实地址的值再与上0x2FFE0000,除非说堆栈栈定的值就是0x20000000吗??还有MSR_MSP(*(vu32*)appxaddr);//初始化堆栈指针又是怎么理解??我看函数里面就是 MSR MSP, r0     BX r14这两条汇编指令而已

一周热门 更多>