将需要存储的不同数据类型的变量作为结构体变量的元素,整体读取和写入,see code.
#include <stdio.h>
#include <malloc.h>
typedef struct
{
char i;
int j;
float k;
char a[10];
int b[10];
float c[10];
}FLASH;
void Write_buff(unsigned char *des_addr,unsigned char *source_addr,int cnt)
{
for(;cnt>0;cnt--)
{
*des_addr++ = *source_addr++;
}
}
void Read_buff(unsigned char *des_addr,unsigned char *source_addr,int cnt)
{
for(;cnt>0;cnt--)
{
*des_addr++ = *source_addr++;
}
}
int main()
{
char i,j;
FLASH flash_1,flash_2;
flash_1.i=10;
flash_1.j=20;
flash_1.k=30;
for(i=0;i<10;i++)
{
flash_1.a[i] = 'a'+i;
flash_1.b[i] = 0x11111100+i;
flash_1.c[i] = 3.0+(float)i/10.0;
}
char *buff = malloc(100);
Write_buff(buff,&flash_1.i,sizeof(FLASH));
Read_buff(&flash_2.i,buff,sizeof(FLASH));
printf("%d %d %f\r\n",flash_2.i,flash_2.j,flash_2.k);
for(;j<3;j++)
{
for(i=0;i<10;i++)
{
if(j==0)
printf("%c ",flash_2.a[i]);
else if(j==1)
printf("0x%8x ",flash_2.b[i]);
else if(j==2)
printf("%.1f ",flash_2.c[i]);
}
printf("\r\n");
}
}
代码功能
- 1:动态申请100个字节大小的buff,认为buff是FLASH中的一段内存;
- 2:将flash_1中需要存储的元素整体写入FLASH,然后从FLASH中读取sizeof(FLASH)大小的数据赋值给flash_2,最终打印flash_2元素验证;
- 3:Write_buff、Read_buff函数参数中源地址和目标地址须是char型变量,因为是取地址(指针),地址作为实参时,指针所指的数据类型被强制转换成char型,才能和FLASH中数据储存形式一致;
- 4:此代码已在ubuntu10.04上验证;