我已经调通了flash。
现在我的需求是这样:
我每隔1分钟存储一次信息,包括:时间,应力,信号幅值。。。。。大概100字节。
这样存最多可以存半个月的信息吧。
会有上位机软件不定期向我获取flash里的信息。它的指令里会给我两个时间参数,我要把这段时间内的历史数据发给上位机。
我的问题是这样:
1,如何把指令里的时间段和我的FLASH存储地址对应起来
2,考虑到停电的情况,flash里存储的信息并不是连续的。也就是说我要知道上位机想要获取的时间段内我自身有没有掉电。
3,半个月后我会用新的信息把最老的信息覆盖掉,这就导致flash最早的有效信息不一定在哪个地址上。
因为以前没做过这样的事,感觉有点思路但还是很乱。
请有经验的前辈指点一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
/****************************************Copyright (c)**************************************************
---------------------------------------------------------------------------------------------------
** Created by: AVRman
** Created date: 2010-10-29
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
********************************************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "SST25VF016B.h"
#include "FlashDriver.h"
/* Private variables ---------------------------------------------------------*/
static uint32_t CurReadAddr; /* 当前读的地址 */
static uint32_t CurWriteAddr; /* 当前写页地址 */
/*******************************************************************************
* Function Name : df_read_open
* Description : 读初始化功能函数
* Input : - addr: 打开后读到的初始地址
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void df_read_open(uint32_t addr)
{
CurReadAddr=addr; /* 当前读的地址 */
}
/*******************************************************************************
* Function Name : df_write_open
* Description : 写初始化功能函数
* Input : - addr: 要写的初始地址
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void df_write_open(uint32_t addr)
{
CurWriteAddr=addr; /* 当前写地址 */
}
/*******************************************************************************
* Function Name : df_read
* Description : 读FLASH函数
* Input : - buf: 接受数据的指针
* - size: 读取数据的大小
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void df_read(uint8_t *buf,uint16_t size)
{
if( CurReadAddr + size <= MAX_ADDR )
{
SSTF016B_RD(CurReadAddr,buf,size);
CurReadAddr+=size;
}
}
/*******************************************************************************
* Function Name : df_write
* Description : 写FLASH函数
* Input : - buf: 写数据的指针
* - size: 要写数据的大小
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void df_write(uint8_t *buf,uint16_t size)
{
if( CurWriteAddr + size <= MAX_ADDR )
{
SSTF016B_WR(CurWriteAddr,buf,size);
CurWriteAddr+=size;
}
}
/*******************************************************************************
* Function Name : df_read_seek
* Description : 调整读取FLASH的地址
* Input : - addr: 新的地址
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void df_read_seek(uint32_t addr)
{
df_read_close();
df_read_open(addr);
}
/*******************************************************************************
* Function Name : df_write_seek
* Description : 调整写FLASH的地址
* Input : - addr: 新的地址
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void df_write_seek(uint32_t addr)
{
df_write_close();
df_write_open(addr);
}
/*******************************************************************************
* Function Name : df_read_close
* Description : None
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void df_read_close(void)
{
/* 此处不做任何处理 */
}
/*******************************************************************************
* Function Name : df_write_close
* Description : None
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void df_write_close(void)
{
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
一周热门 更多>