来用的!头文件可以自己去定义!
下面开始页式存储管理的算法设计。
在实际应用中,对存储要求是很高的!我在硬件调试过程中遇到了一个问题。数据能正常的读写,结果放一段时间数据就掉了!我开始一直以为是我自己的驱动设计有问题!经过多次的修改和验证都没有问题!也考虑过电源和程序编程过程中的问题!但是都无济于事!最好考虑到可能是芯片本身的问题!结果焊上一个进口的flash就解决了问题!下面是在设计中的存储要求:
P001 :设置存储时间
0:不存储
1: 存储1天;
2: 存储1周;
3: 存储1月;
4: 存储3月;
5: 存储6月;
9: 存储数据清零
P002:设置打印功能
0:无打印功能;
1:单机打印
2:开放通讯接口,供数据采集器采集数据;
P081:系统采样时间设置:
调整范围:50MS ~ 5S ;
1:采样时间为50ms
2:采样时间为100ms
3:采样时间为1000ms(1s)
4:采样时间为5000ms(5s)
这些要求,怎样实现存储管理呢!这是一个比较麻烦的事情!这个过程中还要考虑掉电后我怎样从原来的页和buffer 地址开始存储等问题!同时存储过程中还要带有时标信息!看到这些我就想到linux C下面对一些东西的定义和处理!只有用面向对象的思想来解决这些问题!对!C语言在linux系统中是最完美的体现!用他们的想法来解决问题!想到这里我们就开始结构体的设计吧!
[cpp]
/*
*时间结构体
*/
typedef struct {
uint16_t yeat;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t min;
uint8_t sec;
} TIME;
/*
*flash存储状态结构体
*/
typedef struct {
uint16_t CPage_num; //存储的当前页号
uint16_t CBuf_addr; //当页的buffer的地址
uint8_t Cflash_overflow;
} Cflash_State;
/*
*flash存储数据结构体
*/
typedef struct {
uint8_t day;
uint8_t hour;
uint8_t min;
uint8_t sec;
uint8_t adcdata[2];
} Cflash_State;
根据当前状态的管理和数据存储结构的设计能很轻易的完成复杂设计多参数存储管理的要求!
作者 lichangc