zoukankan      html  css  js  c++  java
  • 关于外部存储器件对存储数据的管理。

    一引子 :需要大量存储数据时,一般都不会使用单片机内部存储资源(单片机内部的eerom或者flash模拟eeprom只适合存储少量的数据)。一般是通过I2C/SPI接口外部扩展eeprom或者flash,这类器件存储空间都很大能满足大部分的数据存储要求。

    二 存储器件内部空间的划分:根据存储IC的容量大小、存储操作方法(页操作或块操作)、要存储的内容分类、对存储的实时性要求,

    2.1先定义各记录的自定义数据结构(按记录内容不同分为不同的存储块)

    typedef struct
    {
      unsigned char A01;  
        float         A02;   //
        float         A03;   //

        。。。。
    }Block_A_Type;

    typedef struct
    {
      unsigned char B01;  
        float         B02;   //
        float         B03;   //

        。。。。
    }Block_B_Type;

    .....

    2.2对存储IC按各记录内容的大小进行空间分配:

    /*-----------------------------存储地址分配---------------------------------*/

    #define BLOCK_A_ADDR   1*1024
    #define BLOCK_B_ADDR   2*1024
    #define BLOCK_C_ADDR   3*1024
    ....
    #define BLOCK_TOTAL_ADDR  30*1024

    2.3 对存储IC的驱动程序进行封装,使其能够接收开始地址、写缓冲指针/读缓冲buf指针、读写的字节数这三个参数,

    2.4分别编写对不同数据记录块读写的函数(用具备变量定义记录块可节省RAM,共用体方便操作):

    void BlockA_Write(Block_A_Type Block)
    {
        union abc
      {
        Block_A_Type  Block;  //结构体变量
            unsigned char Buffer[sizeof(Block_A_Type)];
      }Data;
      Data.Block = Block;
        FM24XX_MultWrite(BLOCK_A_ADDR,Data.Buffer,sizeof(Block_A_Type));
    }


    /*
    ----------------------------------------------------------------------------------------------------
    功能:块A读函数
    参数:无
    返回:块A的数据
    ----------------------------------------------------------------------------------------------------
    */
    Block_A_Type BlockA_Read(void)
    {
        union
      {
        Block_A_Type  Block;  //结构体变量
            unsigned char Buffer[sizeof(Block_A_Type)];
      }Data;
        FM24XX_MultRead(BLOCK_A_ADDR,Data.Buffer,sizeof(Block_A_Type));
        return(Data.Block);                                                                 
    }

    三:根据实时性的要求可以增添队列操作,擦写策略的操作

  • 相关阅读:
    java Boolean和boolean的区别
    stack.isEmpty()和empty()
    mysql中文、英文别名排序问题,order by 关键字详解
    数组中array==null和array.length==0的区别
    7.9总结
    7.8总结
    6.25总结
    6.27总结
    6.29总结
    6.28总结
  • 原文地址:https://www.cnblogs.com/jieruishu/p/6834346.html
Copyright © 2011-2022 走看看