FLASH读取半字函数问题

2019-07-20 04:37发布

u16 STMFLASH_ReadHalfWord(u32 faddr)
{
        return *(vu16*)faddr;
}
想请教一个问题,在FLASH章节里面有个读取半字的函数。
这个函数中*(vu16*)faddr该怎么理解呢,32的数据强制转换为16位的地址,在取这个16位地址的值。问题是例如faddr为0X00000004,那么转换为16的地址,应该是低16位,也就是此时的地址0X0004,再取这个地址的值,那这样永远都读取不到faddr高16的数。还是如果我想读取faddr高16的数,就应该读0X00000002,就是faddr前16位,才能读到faddr的高16位呢。谢谢了

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
szczyb1314
1楼-- · 2019-07-20 05:49
 精彩回答 2  元偷偷看……
szczyb1314
2楼-- · 2019-07-20 06:39
把32为的数据当做一个地址来看待,在这个地址处取一个16位的数据出来。
qxp
3楼-- · 2019-07-20 10:39
szczyb1314 发表于 2018-11-23 17:52
faddr为0X00000004,把0X00000004看成一个地址,对STM32来说在这个地址上只存储了1byte的数据,强制类型转 ...

你好,谢谢你的回答,今天才上来看帖子,看来我看书看得不仔细。我想在问一下*(vu16*)faddr;这个还是有点不明白,例如一个数据0X 8111 2222,将这个数据转换为16位的地址应该是0X2222吧,然后在取值,是取的0X2222上的数据吗,就不是0X8111 2222的低16位的数据了。
szczyb1314
4楼-- · 2019-07-20 14:43
 精彩回答 2  元偷偷看……
qxp
5楼-- · 2019-07-20 18:43
 精彩回答 2  元偷偷看……
yuyins
6楼-- · 2019-07-20 18:52
我想问一下32位为一个字节,那么16位为什么就是2个字节了呢

一周热门 更多>