标题:
[讨论]RAM分配
[打印本页]
作者:
angleclare
时间:
2007-3-27 11:08
标题:
[讨论]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 DemoMode
0xA1D = DefaultMode;
....等等变量。
查看.map地址是在指定地址,也没有错误提示。
我的疑问就是前面我统一分配的全局变量无效么?怎么会跑到零页去占地址呢?是和Tiny的模式默认放在零页有关?而为什么后面单独指定地址就行呢?
谢谢各位的回答!
[此贴子已经被作者于2007-3-27 11:08:00编辑过]
作者:
strongchen
时间:
2007-3-27 11:24
对,选择TINY模式的话,就会将变量放入零页地址。
作者:
angleclare
时间:
2007-3-27 11:30
还需要单独定义才行,真是faint啊。.map欺骗感情!
作者:
strongchen
时间:
2007-3-27 13:49
你选择SMALL模式不就行了
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0