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位呢。谢谢了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你要明白的是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
对,为什么啊
是不是地址是32位的为1btye,而16位指的是数据,8位数据占1btye,所以16位就占了2btye
一个地址存储的数据数一个字节,你16位的数据在存储的时候就会占用两个地址(16位数据=2个字节)
一周热门 更多>