贰:读写FLASH的方法

将需要存储的不同数据类型的变量作为结构体变量的元素,整体读取和写入,see code.


#include 
#include 

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上验证;

你可能感兴趣的:(贰:读写FLASH的方法)