|
发表于 2013-8-24 23:33:37
|
显示全部楼层
看到 byte *pp=(byte*)&p 的时候晕了一下,果然C语言的指针概念都还给老师了。
这里的意思应该是:定义了一个字节型数组指针pp,将它指向了变量p。(byte*)是为了将&p强制转换为字节型指针,以便赋值给*pp的。
整个程序是先从串口读了一个不知道哪儿来的数值,然后就把这个数值写入EEPROM,之后又从EEPROM里读出一个数,最后把这个数显示出来,让你看看跟输入数是否相同。
问题:
1、EEPROM初始存了些什么?是不是就是我们下载过去的程序?
2、IDE总是显示:“二进制程序大小:2,906字节(最大32,256字节)”,后面的最大字节数是否就是EEPROM的大小?
3、LZ定义的两个函数,int i=0; 完全可以放进for函数里,否则老以为其他什么地方还用了i变量。
4、在loop里调用这两个自定义函数时,结尾部分LZ都没加分号,居然还调试过了,这是怎么一个情况??
- #include <EEPROM.h>
- #define EEPROM_read(address,p) {byte *pp=(byte*)&p; for(int i=0; i<sizeof(p); i++) pp[i]=EEPROM.read(address+i);}
- #define EEPROM_write(address,p) {byte *pp=(byte*)&p; for(int i=0; i<sizeof(p); i++) EEPROM.write(address+i, pp[i]);}
- unsigned long incomingByte = 0; // 定义无符号长整数型变量incomingByte初始值为0
- void setup() {Serial.begin(9600);}
- void loop() {
- if (Serial.available()>0) {
- incomingByte=Serial.parseInt(); //读取串口传入的下一个有效整数
- EEPROM_write(0,incomingByte); //把incomingByte变量从0地址位开始写入EEPROM
- }
- EEPROM_read(0,incomingByte); //从0地址位开始读取EEPROM,把值写入变量incomingByte
- Serial.println(incomingByte); //通过串口输出
- delay(1000);
- }
复制代码 |
|