求助:EEPROM或者FLASH如何存储结构体数据

2019-07-21 05:38发布

    在论坛里面逛了一圈,没有专门的帖子解释应该怎么做的?求救论坛大神们。不胜感激。
    编译的时候,出现的问题:
    Usereeprom.c(22): error:  #167: argument of type "type_param *" is incompatible with parameter of type "unsigned char *"
其中type_param为结构体类型。困扰我许久
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
pzg123
1楼-- · 2019-07-21 11:35
u16 Pro_WriteDataToStore(u32 addr,u32 flag,u8 *buf,u16 length)
{
        u16 i=0;
        u16 word_count=0;
        u32 address;
        u32 *pu=NULL;
        if(length==0)
        {
                return 0;
        }
        __set_PRIMASK(1);
        word_count=length/4+(length%4!=0);
        pu=(u32 *)buf;
        FLASH_Unlock();
        FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR);
        FLASH_ErasePage(addr);
        address=addr;
        FLASH_ProgramWord(address,flag);
        address=address+4;
        for(i=0;i<word_count;i++)
                FLASH_ProgramWord(address+i*4,pu[i]);
        FLASH_Lock();
        __set_PRIMASK(0);
        return word_count*4;
}
pzg123
2楼-- · 2019-07-21 14:04
写FLASH
地址,标记,取结构体首地址,结构体大小
Pro_WriteDataToStore(PRO_ESP4_STORE_FLASH_ADDRESS,PRO_ESP4_STORE_FLAG,(u8 *)&ESP_Store.pwd,sizeof(ESP_Store.pwd));
aiyeba
3楼-- · 2019-07-21 18:13
看来你是没有理解深刻一点。无论是何种的存储,都是一个个字节存储的。
你说结构体存储也得换算成一个一个字节的。
给你个简单的思路,你可以写一个函数,把结构体里面的字节全部转到一个buff里面,然后
把这个buff扔到EEPROM或者是Flash的写函数里面就可以了。当然还有更高级的办法,
数据类型强制转换,字节对齐。  这个不告诉你
Alone_
4楼-- · 2019-07-21 19:57
aiyeba 发表于 2016-7-28 09:25
看来你是没有理解深刻一点。无论是何种的存储,都是一个个字节存储的。
你说结构体存储也得换算成一个一个 ...

那机构提的某一个单独变量 能单独读取出来么  是不是只能一次性全部读出来
aiyeba
5楼-- · 2019-07-22 00:16
 精彩回答 2  元偷偷看……
好好学B6vfh
6楼-- · 2019-07-22 04:56
FLASH模拟EEPROM只能存储CONST常量吗(看例程里都是const)

一周热门 更多>