搜索
bottom↓
回复: 2

怎样才能使得stm32F103VC读写片内FLASH速度更快磨损更平衡?

[复制链接]

出100入85汤圆

发表于 2023-10-31 22:26:56 | 显示全部楼层 |阅读模式
如题,主芯片是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次,这显然缩减芯片使用寿命

有没有更好的实现可以大大减少擦除次数,加快写入速度

出0入984汤圆

发表于 2023-10-31 22:33:07 | 显示全部楼层
直接用flashdb吧

https://www.amobbs.com/thread-5756553-1-1.html

出0入8汤圆

发表于 2023-11-1 09:03:41 | 显示全部楼层
stm 官方就有例子
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 04:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表