首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[讨论]RAM分配

[讨论]RAM分配

有个问题感觉很奇怪,我用如下方式分配RAM:模式选择Tiny。
Z_RAM = READ_WRITE 0x0050 TO 0x00FF;
RAM2 = READ_WRITE 0x0A00 TO 0x0DFF;

_DATA_ZEROPAGE, MY_ZEROPAGE,ZeroSeg,DEFAULT_RAM INTO Z_RAM;
MY_RAM INTO RAM2;
我堆栈另放的。
然后全局变量分配
#pragma DATA_SEG MY_RAM
/***************************Global Variables****************************/
SlaveMsgBufferType CurrentSlaveStatus[12];
DemoModeType_t DemoMode= DefaultMode;
....等等变量。
Make后在.map看到此变量确实分配在我指定的RAM里面。因为变量很多,提示错误L1907: Fixup overflow in main to CurrentSlaveStatus type 1 at offset 0x22 我的理解是Z_RAM空间不够,地址溢出了。
后来我改成如下形式:
SlaveMsgBufferType CurrentSlaveStatus[12]0xA50;
DemoModeType_t DemoMode0xA1D = DefaultMode;
....等等变量。
查看.map地址是在指定地址,也没有错误提示。
我的疑问就是前面我统一分配的全局变量无效么?怎么会跑到零页去占地址呢?是和Tiny的模式默认放在零页有关?而为什么后面单独指定地址就行呢?
谢谢各位的回答!

[此贴子已经被作者于2007-3-27 11:08:00编辑过]

宁静致远 淡泊明志 --------------By AC
对,选择TINY模式的话,就会将变量放入零页地址。
海纳百川  有容乃大
还需要单独定义才行,真是faint啊。.map欺骗感情!
宁静致远 淡泊明志 --------------By AC
你选择SMALL模式不就行了
海纳百川  有容乃大
返回列表