使用CodeWarrior学习和调试一个例程时的一些令我不解的问题。
- UID
- 83540
- 性别
- 男
|
使用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 |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
感觉你的段的定义有些问题,改成这样试试
#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); |
|
|
|
|
|
- UID
- 83540
- 性别
- 男
|
seuafu2005,你好!我照那样改了问题依然存在,而且“#pragma Code_SEG DEFAULT_ROM”似乎有点问题。 |
|
|
|
|
|
- UID
- 104734
- 性别
- 女
|
在存贮空间地说明里面DEFAULT_ROM,好像是read only吧! |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
VarA应该没有什么问题了吧?
关于input4的问题,我试了一下你的code,的确有你说的情况存在。在不同的编译环境下面input4显示的值还不相同。不过,function4的返回的值应该是对的,你可以试一下。至于input4为什么没有显示出你输入的那个值,我想可能是仿真软件的bug。我会继续跟踪这个情况,如果有什么消息会告诉你的。 |
|
|
|
|
|
- UID
- 83540
- 性别
- 男
|
|
|
|
|
|