初级会员

- 积分
- 189
- 金钱
- 189
- 注册时间
- 2014-10-21
- 在线时间
- 31 小时
|
发表于 2015-7-30 20:16:04
|
显示全部楼层
回复【9楼】LuoKen:
---------------------------------
我实验了一下,我想你说的size指的是u16的个数吧,而不是sizeof(test)的值对么?
也就是说你说的:
u8的size ,就得除以2。
u16的size,保持不变化。
u32的size,就得乘以2。
这里的size,指的是数组的个数,而不是sizeof(test),因为sizeof()得到的是八位数的个数
1.定义u8数组
u8 Flash_save_test[4]={0x01,0x02,0x03,0x04};
u8 Flash_read_test[4];
然后写入
sizeof(Flash_save_test)=4;
STMFLASH_Write(FLASH_SAVE_ADDR,(uint16*)Flash_save_test,4);
STMFLASH_Read(FLASH_SAVE_ADDR,(uint16*)Flash_read_test,4);
如下
0X08020000: 01 02 03 04 00 00 00 00
这里后面的四个数出错,个数应该写2,表示两个16位的数
即
STMFLASH_Write(FLASH_SAVE_ADDR,(uint16*)Flash_save_test,2);
个数为2后,结果为
0X08020000: 01 02 03 04,正确
2.定义u16数组
u16 Flash_save_test[4]={0x01,0x02,0x03,0x04};
u16 Flash_read_test[4];
然后写入
sizeof(Flash_save_test)=8;
STMFLASH_Write(FLASH_SAVE_ADDR,(uint16*)Flash_save_test,8);
0X08020000: 01 00 02 00 03 00 04 00 00 00 00 00 00 00 00 00
这里也出错,应该是4,也就是说是4个16位数
改为
STMFLASH_Write(FLASH_SAVE_ADDR,(uint16*)Flash_save_test,4);
得到的为
0X08020000: 01 00 02 00 03 00 04 00,正确
3.最后个问题,如果就存一个八位的数,那不是会浪费掉一个字节么,比如存0x01,那么就会
0X08020000:01 00
4.看来我原来的理解错误了,现在的理解对吗?
就是若是8位数组,那么是两个八位数,组成一个十六位写入一个
若是16位数组,那么一个十六位数写入一个
若是32位数组,那么一个三十二位数拆成两个十六位数写入两个
那么不就是只要sizeof(test)/2带入就行了?
感谢乔巴大神的耐心赐教 |
|