找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2110|回复: 6
打印 上一主题 下一主题
收起左侧

EEPROM存储C语言 int数据类型读取出错

[复制链接]
跳转到指定楼层
楼主
ID:960619 发表于 2021-9-30 21:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
EEPROM存储int数据类型,分两个char存入,读取怎么都是65536;
int A=50;
char a,b;
a=A,b=A>>8;

IapEraseSector(0x0600);
IapProgramByte(0x0600,b);  
IapProgramByte(0x0600+1,a);               




b =IapReadByte(0x0600);
a=IapReadByte(0x0600+1);



A=b<<8|a;


这样操作是哪里出了问题吗

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2021-9-30 22:56 | 只看该作者
假定,你IAP函数都没有问题,作如下修改

// A=b<<8|a;

A = b;
A <<= 8;
A += a;

回复

使用道具 举报

板凳
ID:624769 发表于 2021-9-30 23:19 | 只看该作者
// a=A,b=A>>8;
a = A;
b = A>>8;
回复

使用道具 举报

地板
ID:960619 发表于 2021-10-1 10:35 | 只看该作者
本帖最后由 baobao125 于 2021-10-1 12:08 编辑
188610329 发表于 2021-9-30 23:19
// a=A,b=A>>8;
a = A;
b = A>>8;

A=b<<8|a;这里出问题了, a设置初始值0xe8,b初始0x03,把A=a;不知为何就变成了0xffe8;这样一来A=b<<8|a  就成了0xffe8;
回复

使用道具 举报

5#
ID:57657 发表于 2021-10-1 12:32 | 只看该作者
int最大65535,没有65536
回复

使用道具 举报

6#
ID:960619 发表于 2021-10-1 18:43 | 只看该作者
npn 发表于 2021-10-1 12:32
int最大65535,没有65536

噢,也不是这里的问题。找了一下午找出的问题原因是定义的变量是char类型的,调试模式赋值时就成了int类型了。跟另一char类型 |出来的结果都是0xffff。不知道为什么。删掉那个变量重新定义了就没事了
回复

使用道具 举报

7#
ID:57657 发表于 2021-10-3 21:24 | 只看该作者
baobao125 发表于 2021-10-1 18:43
噢,也不是这里的问题。找了一下午找出的问题原因是定义的变量是char类型的,调试模式赋值时就成了int类 ...

你这样移位可以直接用union联合体代替,不需要移位。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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