硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2846|回复: 7
收起左侧

[有问必答] EEPROM保存参数及读取和memcpy,memmove问题

[复制链接]

36

主题

142

回帖

255

积分

高级会员

积分
255
发表于 2018-7-17 09:23:32 | 显示全部楼层 |阅读模式
定义一个结构UI_PARAM_T,有uint8_t,uint16_t,uint32_t,float类型
memcpy(&g_tUi.UiParam, &g_tParam, sizeof(UI_PARAM_T)); 数据有误,用memmove也是一样。
ee_ReadBytes((uint8_t *)&g_tParam, PARAM_ADDR, sizeof(PARAM_T)); 读数据也是错误的。
之前遇过浮点参数保存是个问题。
大家有什么建议吗
回复

使用道具 举报

36

主题

142

回帖

255

积分

高级会员

积分
255
 楼主| 发表于 2018-7-17 10:30:34 | 显示全部楼层
是否和字节对齐有关
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-7-17 11:07:00 | 显示全部楼层
帮你简单测试了下,没问题

定义:
typedef struct
{
        uint32_t ParamVer;               
        uint16_t ucBackLight;
        uint8_t Addr485;
        float fP;
} PARAM_T;

PARAM_T g_tParam1;

typedef struct
{
        uint8_t ucBackLight;
        PARAM_T tUI;
} PARAM1_T;

PARAM1_T g_tParam2;


赋初值
g_tParam1.ParamVer = 10;
g_tParam1.ucBackLight = 255;
g_tParam1.Addr485 = 100;
g_tParam1.fP = 2.55f;


测试:
printf("-------------------------------\r\n");
printf("xxxxxxxxx = %d\r\n", sizeof(g_tParam1));
printf("g_tParam1.ParamVer = %d\r\n", g_tParam1.ParamVer);
printf("g_tParam1.ucBackLight = %d\r\n", g_tParam1.ucBackLight);
printf("g_tParam1.Addr485 = %d\r\n", g_tParam1.Addr485);
printf("g_tParam1.fP = %f\r\n", g_tParam1.fP);

//g_tParam2.tUI = g_tParam1;
memcpy(&g_tParam2.tUI, &g_tParam1, sizeof(PARAM_T));
printf("g_tParam2.tUI.ParamVer = %d\r\n", g_tParam2.tUI.ParamVer);
printf("g_tParam2.tUI.ucBackLight = %d\r\n", g_tParam2.tUI.ucBackLight);
printf("g_tParam2.tUI.Addr485 = %d\r\n", g_tParam2.tUI.Addr485);
printf("g_tParam2.tUI.fP = %f\r\n", g_tParam2.tUI.fP);               


效果:
QQ截图20180717110834.png




回复

使用道具 举报

36

主题

142

回帖

255

积分

高级会员

积分
255
 楼主| 发表于 2018-7-18 09:26:05 | 显示全部楼层
谢谢硬汉的回复,memcpy问题是我程序问题指针错了,EEPROM保存参数及读取仍然有问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2018-7-18 09:42:27 | 显示全部楼层
takent 发表于 2018-7-18 09:26
谢谢硬汉的回复,memcpy问题是我程序问题指针错了,EEPROM保存参数及读取仍然有问题

你的驱动估计有问题,你再搞搞吧。
回复

使用道具 举报

36

主题

142

回帖

255

积分

高级会员

积分
255
 楼主| 发表于 2018-7-18 09:47:10 | 显示全部楼层
驱动是用V4的I2C,EEPROM的BSP。确实奇怪。我用V4-102_I2C串行EEPROM读写例程也是OK。我再查查。
回复

使用道具 举报

36

主题

142

回帖

255

积分

高级会员

积分
255
 楼主| 发表于 2018-7-26 09:11:27 | 显示全部楼层
已解决,AT24C08芯片,EEPROM驱动代码问题,谢谢硬汉了。参考论坛
http://www.armbbs.cn/forum.php?m ... mp;highlight=EEPROM
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
发表于 2018-7-26 18:50:33 | 显示全部楼层
takent 发表于 2018-7-26 09:11
已解决,AT24C08芯片,EEPROM驱动代码问题,谢谢硬汉了。参考论坛
http://www.armbbs.cn/forum.php?mod ...

解决就好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 12:33 , Processed in 0.256172 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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