Flash存取数据的另一种思路

在嵌入式项目中,通常使用Flash存储关键参数并设置标志位进行有效性判断。但新方法提出直接将Flash地址赋值给全局参数指针,减少RAM占用。这样在需要参数时,MCU直接从Flash读取,避免了参数复制。然而,这种方法不允许直接修改参数,且在使用大结构体写入Flash时可能存在栈溢出风险。
摘要由CSDN通过智能技术生成

在嵌入式项目中,为了让设备在断电后某些关键参数不丢失,比如设备ID,网络配置,外设配置等。我们会将这些关键的参数存储到片内的Flash中。一般的做法都是在Flash划分一块空间做存储参数用,并且里面有一个空间存储一个标志,这个标志指示了Flash中是否存储了有效的参数。在第一次烧录程序时,Flash空间内没有存过参数,上电后这个标志读出来就是0XFF,此时程序就会将默认参数写入到Flash中,并且把标志位设置为某个特定值写入Flash中,这样下次上电再从Flash中读标志就会发现不是0XFF,如果是特定值,说明FLASH中参数有效,我们就会把FLASH中的参数读出来,拷贝给RAM中的全局变量。当然,为了更可靠,我们一般还会加入CRC校验。

#define PARA_FLASH_ADDR 0X80003000

typde struct{
    uint8_t flag;
    uint32_t id;
    uint8_t baud;
    uint16t crc;
}stPara_t;

stPara_t gPara = {0};
uint8_t Flash_ParamRead(stPara_t* para)
{
    FlashRead((uint8_t*)para,PARA_FLASH_ADDR,sizeof(stPara_t));
    return 1;
}

uint8_t Flash_ParamWrite(stPara_t* para)
{
    FlashWrite((uint8_t*)para,PARA_FLASH_ADDR,sizeof(stPara_t));
    return 1;
}

存取参数的时候

//取参数
Flash_ParamRead(&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值