keil c51 中使用 const 和 code 的一点想法

2020-01-24 12:02发布

声明:以下想法纯属个人乱想,欢迎大家丢鸡蛋并说出自己的理解

    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 // 这个应该是对的
这也说不通啊 ,具体情况我也不知道,向各位请教下

为什么就改变了下数据定义的方式,出来的结果完全不一样呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
mcu5i51
1楼-- · 2020-01-24 17:16
const 指向的是RAM的地址
code 指向的FLASH的地址
编译后看RAM变化可以知道
mcu5i51
2楼-- · 2020-01-24 20:05
你的const 应该是外部RAM数据,或P0口的状态
了无
3楼-- · 2020-01-24 20:10
 精彩回答 2  元偷偷看……
richards
4楼-- · 2020-01-25 01:45
这个算是明白了。
奮闘ing
5楼-- · 2020-01-25 03:08
学习了~
four_zhg
6楼-- · 2020-01-25 07:19
学习一下了

一周热门 更多>