有个问题感觉很奇怪,我用如下方式分配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编辑过] |