单片机机的内存模式问题

[复制链接]
3406|7
 楼主| bmfw 发表于 2010-11-15 21:05 | 显示全部楼层 |阅读模式
今天用AT89C51编了个程序,在程序中要查表,为什么表中的数据个数只有大约一百个才能编译通过,如果多了就通不过,改变了内存模式就行?
const uchar Font2[]={
/*--  文字:  0  --*/
/*--  宋体18;  此字体下对应的点阵为:宽x高=12x24   --*/
/*--  宽度不是8的倍数,现调整为:宽度x高度=16x24  --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x19,0x80,0x30,0xC0,
0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0x60,0x60,0x30,0xC0,0x30,0xC0,0x19,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x19,0x80,0x30,0xC0,
0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0x60,0x60,0x30,0xC0,0x30,0xC0,0x19,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x19,0x80,0x30,0xC0,
0x30,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0x60,0x60,0x30,0xC0,0x30,0xC0,0x19,0x80,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
ayb_ice 发表于 2010-11-15 21:17 | 显示全部楼层
const uchar code Font2[]即可
单片机RAM极其宝贵啊,51不同的RAM空间大小不一,访问方法,效率也不一样
DATA空间128字节
SFR空间128字节
IDATA空间256字节,其中128与DATA重叠
XDATA空间64K字节
PDATA空间256字节,共256页,与XDATA重叠
...
不同的编译模式将变量定位在不同的空间(除非特别指定),如果超过相应空间限制自然会出错了
...
dong_abc 发表于 2010-11-15 22:19 | 显示全部楼层
好好研究一下楼上所说的东西吧
月下狂想曲 发表于 2010-11-16 19:35 | 显示全部楼层
之前也搅了个大头佛出来,定义了code 就行了,听说这样是放在flash里面的,

const 是一个常量吧,直接定义是放在那里的?放在RAM中吗?
 楼主| bmfw 发表于 2010-11-17 10:21 | 显示全部楼层
const:表示定义常量code:表示数据存储在程序存储器中,相当于汇编的DB,昨天才看见的,呵呵
ayb_ice 发表于 2010-11-17 10:44 | 显示全部楼层
const只是表明是常量,不可改变,并不表示放在什么空间
tianm 发表于 2010-11-17 12:25 | 显示全部楼层
书上都有写
zhiyonghe 发表于 2010-11-17 12:55 | 显示全部楼层
该用 code 还是要用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

86

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部