标题: EEPROM存储C语言 int数据类型读取出错 [打印本页]

作者: baobao125    时间: 2021-9-30 21:21
标题: EEPROM存储C语言 int数据类型读取出错
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;


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


作者: 188610329    时间: 2021-9-30 22:56
假定,你IAP函数都没有问题,作如下修改

// A=b<<8|a;

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


作者: 188610329    时间: 2021-9-30 23:19
// a=A,b=A>>8;
a = A;
b = A>>8;
作者: baobao125    时间: 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;
作者: npn    时间: 2021-10-1 12:32
int最大65535,没有65536
作者: baobao125    时间: 2021-10-1 18:43
npn 发表于 2021-10-1 12:32
int最大65535,没有65536

噢,也不是这里的问题。找了一下午找出的问题原因是定义的变量是char类型的,调试模式赋值时就成了int类型了。跟另一char类型 |出来的结果都是0xffff。不知道为什么。删掉那个变量重新定义了就没事了
作者: npn    时间: 2021-10-3 21:24
baobao125 发表于 2021-10-1 18:43
噢,也不是这里的问题。找了一下午找出的问题原因是定义的变量是char类型的,调试模式赋值时就成了int类 ...

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1