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
2019-07-21 00:19
yuyins 发表于 2018-12-5 21:10
我想问一下32位为一个字节,那么16位为什么就是2个字节了呢

你要明白的是32单片机说的是它的地址线是32根,能访问的空间范围是0-2^32-1 byte,每个地址空间上只存储1byte数据,你的u32型数据是占了4byte的空间的,至于这4byte数据的顺序还涉及单片机的大小端模式,32单片机是小端模式,51和TI的C2000dsp是大端模式。
切记切记:数据和数据的地址一定要搞懂
你定义一个数据,u8 a = 3;a这个变量的地址是0x20000056;在这个地址上存放着你的数据3
你定义u32 b = 0x12345678;b的地址是0x20000057;在0x20000057上存放的是0x78,在在0x20000058上存放的是0x56,在0x20000059上存放的是0x34,在0x2000005A上存放的是0x12

一周热门 更多>