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

这是咋回事

这是咋回事

用qg4,使用的tiny模式。在程序中定义全局变量


#pragma DATA_SEG FAR_RAM
word my_id;


程序中用到了该变量。编译没有问题,链接的时候出现


L1907:Fixup overflow in main,to my_id type 1,at offset 0x9


什么地方设置出问题了?我的.prm文件如下:


/* This is a linker parameter file for the QG4 */


NAMES END /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your own files too. */


SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
    ROM                      =  READ_ONLY    0xF000 TO 0xFBFF;
    FLASH_PRO_ROM            =  READ_ONLY    0xFC00 TO 0xFDFF;
    Z_RAM                    =  READ_WRITE   0x0060 TO 0x00FF;
    RAM                      =  READ_WRITE   0x0100 TO 0x015F;
    ROM1                     =  READ_ONLY    0xFFC0 TO 0xFFCF;
END


PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */
    FAR_RAM                             INTO  RAM;
    DEFAULT_ROM, ROM_VAR, STRINGS       INTO  ROM; /* ROM1 In case you want to use ROM1 as well, be sure the option -OnB=b is passed to the compiler. */
    _DATA_ZEROPAGE, MY_ZEROPAGE, DEFAULT_RAM         INTO  Z_RAM;
END



STACKSIZE 0x30


VECTOR 0 _Startup /* Reset vector: this is the default entry point for an application. */

有志青年!

是不是你用了DATA_SEG以后没有用CODE_SEG把你的main放到代码段
所以main也被放到ram段,造成溢出?

或者你的其他变量太多了? 

[此贴子已经被seuafu2005于2006-5-25 10:46:15编辑过]

用#pragma DATA_SEG FAR_RAM定义,只对紧跟定义的变量起作用吧,不会起作用到文件尾吧。

如:
#pragma DATA_SEG FAR_RAM
byte test1;
byte test2;
那么test1被放在FAR_RAM,test2应该被放在DEFAULT_RAM吧。
对于没有用#pragma 定义的变量或者代码,都应该是默认分配的。所以main不会被放到ram区。

我的源程序如下:
#include


byte my_addr;

#pragma DATA_SEG FAR_RAM
byte test;

void main(void) {

my_addr=1;
test=1;

for(;;) {
__RESET_WATCHDOG();
}

}
prm文件在顶楼。
有志青年!
不是,pragma之后的都会放在你定义的段里面
你可以查看.map文件,看变量和程序的放置情况
自己多尝试一下就明白了
pragma是之后都有效,但它会区别DATA_SEG(变量),CODE_SEG(代码),所以程序不会放到RAM里面;

试试用#pragma DATA_SEG FAR FAR_RAM
   
楼上的办法管用,赞!
有志青年!
返回列表