声明:以下想法纯属个人乱想,欢迎大家丢鸡蛋并说出自己的理解
unsigned char code * Point = 0x0F00;
unsigned char const * const Point = 0x0F00;
变量/常亮的定义如上,首先说明下我遇到的问题:
在数据初始化的时候向 eeprom地址 0xE0 中写入数据 0x0F,在 0xE1中写入 0x72,在读数据函数中是直接使用的数据手册推荐的 *(Point + offset)的方法去除数据的
在使用上面两个不同的定义读 eeprom时得到两个不同的数据,数据发送是低位在前,先发的 0x0F,再发的 0x72,反过来以后 应该是 1111 0000 0100 1110
宽脉冲为 1,窄脉冲为 0
这个是使用 unsigned char const * const Point = 0x0F00; 定义得到的数据
使用 code定义得到的数据.jpg (185.92 KB, 下载次数: 0)
下载附件
使用 code得到的数据
2014-3-21 14:45 上传
可以明显区别两个数据的不同,且后者才是正确的数据。
不知是什么问题导致理论上的相同位置出现两组不同的数据。故大胆猜测,这两个地址指向的不是同一个位置,也就是说两种方式的定义使得 0x0F00被定义的位置发生了变化
一个是相对代码段偏移 0x0F00而 eeprom在代码段的后段所以指向的位置是正确的
,一个是相对起始地址 0x0000偏移 0x0F00 // 这个应该是对的
这也说不通啊
,具体情况我也不知道,向各位请教下
为什么就改变了下数据定义的方式,出来的结果完全不一样呢
code 指向的FLASH的地址
编译后看RAM变化可以知道
一周热门 更多>