|
如题,主芯片是STM32F103VC,读写一个结构体,大概50个字节,有个文件大概由70个结构体组成。
//结构体,大概50字节
struct
{
} ABC;
//文件,70个结构体
struct ABC file_Rec[70];
//VCT6 FLASH页是2048个字节
//声明结构体
u8 Flash_m_pBuffer[2048];
现在读结构体的函数是
//PageNum 当前页
//StartPos 结构体开始位置
//DataNum 结构体长度
//pData 从FLASH读出来结构体待存入区域的指针
void Flash_ReadPage(uint16 PageNum,uint16 StartPos,uint16 DataNum,void* pData)
{
直接读;
}
现在写结构体的函数是
//PageNum 当前页
//StartPos 结构体开始位置
//DataNum 结构体长度
//pData 指向待写入FLASH数据区域的指针
void Flash_WritePage(uint16 PageNum,uint16 StartPos,uint16 DataNum,void* pData)
{
直接读一整页到Flash_m_pBuffer;
待写入FLASH数据填充到Flash_m_pBuffer对应位置;
擦除整页Flash;
将填充好的Flash_m_pBuffer回写到对应页;
}
如果仅限于读和写一个结构体没有问题
当读文件也没什么问题
问题出现再写文件的时候
我目前是这么写文件的
void writefile()
{
int i;
for(i=0; i<70; i++)
{
Flash_WritePage(page, start+i*50, 50, &file_Rec[i]);
}
}
现在问题是写入70个结构,前50个结构就需要读一个页50次,擦除一个页50次,写入50次,再加上后面20个结构需要的读一个页20次,擦除一个页20次,写入20次
写一次文件不光费时,还需要对一页擦除写入50次,这显然缩减芯片使用寿命
有没有更好的实现可以大大减少擦除次数,加快写入速度 |
|