oCgyITrH.rar (534.88 KB)
片子是9S12XDT512,SMALL模式。
在prm文件中,我定义了一个空间 MySection INTO PAGE_FE;
而 PAGE_FE = READ_ONLY 0xFE8000 TO 0xFEBFFF;
然后在main,c里,我将一个延时程序放到了自定义的这个空间里
#pragma CODE_SEG MySection
void delay(void)
{
int Loop1,Loop2;
for(Loop2=0;Loop2<1000;Loop2++)
for(Loop1=0;Loop1<400;Loop1++);
}
#pragma CODE_SEG DEFAULT
现在的问题是,当我将这个空间定义到PAGE_FE,程序可以正常运行,而定义到其它可页寻址的空间,如PAGE_FC等的时候,程序就不跑了!并且在memory窗口的对应地址上,可以看到我定义的这个程序的代码!但程序好象不能调用一样。
PAGE_FE对应的是线性地址0x8000~0xc000的全局地址空间,所以将程序放到这里面能够正常运行是可以理解的。但为什么定义到其它的可页寻址空间时,程序就不跑了。难道在SMALL模式下,不能对可页寻址空间进行访问?
在small模式下,调用函数时编译器不会自动修改PPAGE寄存器,所以只能访问FF,FE,FD三个FLASH页面,亦即供48K的P_FLASH。访问变量时编译器也不会自动修改RPAGE和EPAGE寄存器,所以只能访问12K的RAM和2K的EEPROM,当然还有2K的寄存器空间,共64K空间。相信你把代码放到FD和FF空间也是没有问题的。
另外,在small模式下只是编译器不替你管理页面寄存器,如果你自己来控制页面寄存器仍然可以访问所有的空间。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |