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

使用CodeWarrior学习和调试一个例程时的一些令我不解的问题。

使用CodeWarrior学习和调试一个例程时的一些令我不解的问题。

//main.c文件 #include /* for EnableInterrupts macro */ #include #pragma DATA_SEG BUFFER unsigned char near VarA = 0x02; /* DEFAULT_RAM必须要设置在从低8位地址开始,不然会出现L1907的错误。不知道是为什么?VarA只是一个near变量,它的地址范围应该是从0x00-0xff。像程序中的0x02,0xff这些VarA的赋值也只是个变量值而已,看上去把DEFAULT_RAM照前面那样设置就好像0x02,0xff是地址值似的,所以令人不解。(也许是我的理解错误。) */ byte result2; word result3; byte *result4; byte Array[] = {0x01, 0x02, 0x03, 0x04}; #pragma DATA_SEG DEFAULT void function1(void); byte function2(byte); word function3(word); char *function4(byte); void main(void) { EnableInterrupts; /* enable interrupts */ function1(); result2 = function2(0x07); result3 = function3(0x0096); result4 = function4(0x03); for(;;) { __RESET_WATCHDOG(); /* kicks the dog */ } } void function1(void){ VarA = 0xFF; } byte function2(byte input2){ input2++; return input2; } word function3(word input3){ input3 *= 2; return input3; } char *function4(byte input4){ /*不知为什么当我用P&E simulator调试时 “Data:2”窗口显示input 是128而不是我传进去的3。*/ return &Array[input4]; } //P&E_FCS_Linker.prm文件 /* This is a linker parameter file for the GP32 */ NAMES END SEGMENTS Z_RAM = READ_WRITE 0x0040 TO 0x00FE; RAM = READ_WRITE 0x00FF TO 0x023F; ROM = READ_ONLY 0x8000 TO 0xFDFF; END PLACEMENT DEFAULT_ROM INTO ROM; DEFAULT_RAM INTO RAM; _DATA_ZEROPAGE, MY_ZEROPAGE INTO Z_RAM; END STACKSIZE 0x50 VECTOR 0 _Startup
感觉你的段的定义有些问题,改成这样试试

#pragma DATA_SEG MY_ZEROPAGE
unsigned char near VarA = 0x02;


#pragma Code_SEG DEFAULT_ROM

void function1(void);
byte function2(byte);
word function3(word);
char *function4(byte);
seuafu2005,你好!我照那样改了问题依然存在,而且“#pragma Code_SEG DEFAULT_ROM”似乎有点问题。
在存贮空间地说明里面DEFAULT_ROM,好像是read only吧!
不断学习,摸索中进步!
VarA应该没有什么问题了吧?
关于input4的问题,我试了一下你的code,的确有你说的情况存在。在不同的编译环境下面input4显示的值还不相同。不过,function4的返回的值应该是对的,你可以试一下。至于input4为什么没有显示出你输入的那个值,我想可能是仿真软件的bug。我会继续跟踪这个情况,如果有什么消息会告诉你的。
谢谢,seuafu2005!
返回列表