2019-08-23 15:28发布
dozm 发表于 2017-3-30 16:07 (vu32*)appxaddr 转换成地址,*(vu32*)appxaddr 取这个地址存的值,再与0xffe0000位与
Roderick 发表于 2017-3-30 16:16 这个我能理解,我大概不懂的是*(vu32*)appxaddr 这个地址存的值是什么??其次0x20000000是什么不太懂
Roderick 发表于 2017-3-30 16:40 我懂了我懂了 谢谢
最多设置5个标签!
((*(vu32*)appxaddr)&0xffe0000)==0x20000000
appxaddr应该是个变量,看名字应该表示某个地址
然后(vu32*)appxaddr表示将appxaddr强制转换成vu32*类型,该类型是一个volatile 的无符号32长度(long)数据指针,
再然后(*(vu32*)appxaddr)表示取出指针指示的变量数值。
上面整体的说,就是将appxaddr这个变量中的数值作为地址,然后取出这个地址中的数值(要取32位,并且把这个取出的数值看作无符号的long型)。
再然后就是跟0xFFE0000与一下,看最后结果是否与0x20000000相等。
至于为什么说这条语句判断是否栈顶合法,这要看程序逻辑和MCU的地址分布了。语法上看不出什么来。
这个我能理解,我大概不懂的是*(vu32*)appxaddr 这个地址存的值是什么??其次0x20000000是什么不太懂
我懂了我懂了 谢谢
我还是不懂,函数传进来的地址是0x08010000的话,更好是IAP函数的起始地址,也就是取其实地址的值再与上0x2FFE0000,除非说堆栈栈定的值就是0x20000000吗??还有MSR_MSP(*(vu32*)appxaddr);//初始化堆栈指针又是怎么理解??我看函数里面就是 MSR MSP, r0 BX r14这两条汇编指令而已
一周热门 更多>