yanzhiwei 发表于 2016-3-31 14:43:11

MPLAB X IDE + xc8 不能用EEPROM_READ和EEPROM_WRITE读写数据,求解决...

MPLAB IDE v8.90+PICC可以调用EEPROM_READ(0)和EEPROM_WRITE(0,0)两个函数进行数据的读写。最近把程序移到MPLAB X IDE v3.20+xc8编译运行就发现数据不能写进EEPROM了,不知道这是什么问题。是XC8不支持那两个函数了么?还是我配置的问题?有谁遇到这个问题没,有什么解决方法一起探讨一下

lu976046395 发表于 2016-3-31 17:37:21

应该是XC8不支持者两个函数,应该是有另外的操作方法,XC16是直接定义一个在EEPROM里面的变量(永久变量)就可以操作了

eeant.net 发表于 2016-3-31 17:38:52

直接使用EEPROM_READ和EEPROM_WRITE在某些事会有问题的
可以是用以下两个函数来代替,这两个函数也是编译器自带的。
extern void eeprom_write(unsigned char addr, unsigned char value);
extern unsigned char eeprom_read(unsigned char addr);

ersha4877 发表于 2016-3-31 18:40:21

eeant.net 发表于 2016-3-31 17:38
直接使用EEPROM_READ和EEPROM_WRITE在某些事会有问题的
可以是用以下两个函数来代替,这两个函数也是编译器 ...

这两个函数在哪里的,谢谢

yanzhiwei 发表于 2016-3-31 22:39:42

lu976046395 发表于 2016-3-31 17:37
应该是XC8不支持者两个函数,应该是有另外的操作方法,XC16是直接定义一个在EEPROM里面的变量(永久变量) ...

不知道是否支持,但是调用了这两个函数它也不会报错的。不知道有什么另外的操作方法,不会要自己从写函数了吧?那样的话就没有PICC那样方便了

yanzhiwei 发表于 2016-3-31 22:42:03

eeant.net 发表于 2016-3-31 17:38
直接使用EEPROM_READ和EEPROM_WRITE在某些事会有问题的
可以是用以下两个函数来代替,这两个函数也是编译器 ...

谢谢!我找过XC8里面相关的头文件了,没发现这两个函数。我先试试吧

yanzhiwei 发表于 2016-3-31 22:52:14

eeant.net 发表于 2016-3-31 17:38
直接使用EEPROM_READ和EEPROM_WRITE在某些事会有问题的
可以是用以下两个函数来代替,这两个函数也是编译器 ...

刚刚试了你说的方法,但是一编译就出现错误了。如图

eeant.net 发表于 2016-3-31 23:12:10

ersha4877 发表于 2016-3-31 18:40
这两个函数在哪里的,谢谢

在include目录下的eeprom_routines.h

eeant.net 发表于 2016-3-31 23:12:49

yanzhiwei 发表于 2016-3-31 22:42
谢谢!我找过XC8里面相关的头文件了,没发现这两个函数。我先试试吧

include目录下的eeprom_routines.h

ersha4877 发表于 2016-4-1 08:17:05

eeant.net 发表于 2016-3-31 23:12
在include目录下的eeprom_routines.h

感谢,不过这个是内部EEPROM ,不知那里可以有MSSP I2C的程序,谢谢

yanzhiwei 发表于 2016-4-1 13:19:26

eeant.net 发表于 2016-3-31 23:12
在include目录下的eeprom_routines.h

谢谢,我试过了,还是会提示7楼图片所示的错误。我已经把相应的头文件都包涵进去了,现在都搞不懂什么状况了

lu976046395 发表于 2016-4-5 22:05:41

yanzhiwei 发表于 2016-3-31 22:39
不知道是否支持,但是调用了这两个函数它也不会报错的。不知道有什么另外的操作方法,不会要自己从写函数 ...

persistent
persistent 属性指定不应在启动时初始化或清零变量。带persistent 属性的变量
可用于存储在器件复位后仍然有效的状态信息。
int last_mode __attribute__ ((persistent));
这是《MPLAB® XC16 C 编译器 用户指南里面》的变量属性进行限定即可,不知道XC8是否有这样的操作,现在解决了吗?

yanzhiwei 发表于 2016-4-7 00:34:24

lu976046395 发表于 2016-4-5 22:05
persistent
persistent 属性指定不应在启动时初始化或清零变量。带persistent 属性的变量
可用于存储在器 ...

谢谢啦。这几天忙别的了,这个问题还没解决,明天用你说的方法试试。

pangbin4 发表于 2016-4-11 16:43:57

XC8支持这两个涵数的!自动包含头文件的!

yanzhiwei 发表于 2016-4-13 10:05:42

pangbin4 发表于 2016-4-11 16:43
XC8支持这两个涵数的!自动包含头文件的!

试过了,调用后就是无法保存数据,之前用PICC9.5的时候就可以

yanzhiwei 发表于 2016-4-13 10:08:42

lu976046395 发表于 2016-4-5 22:05
persistent
persistent 属性指定不应在启动时初始化或清零变量。带persistent 属性的变量
可用于存储在器 ...

还没解决,用了你介绍的方法也不能保存,不知道是不是我哪里设置不对,以前用PICC都可以,现在只是把以前的程序移植到这边来而已。太郁闷了
页: [1]
查看完整版本: MPLAB X IDE + xc8 不能用EEPROM_READ和EEPROM_WRITE读写数据,求解决...