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

我又有新问题了:关于FLASH页寻址

我又有新问题了:关于FLASH页寻址

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模式下,不能对可页寻址空间进行访问?

我刚刚试了下,在BANKED模式下,定义到任何可页寻址空间都没问题!
为什么在SMALL模式下就不行呢?[em06]
small时,只能寻址64KB的空间,
个人BLOG:http://blog.eccn.com/u/107300/index.htm

在small模式下,调用函数时编译器不会自动修改PPAGE寄存器,所以只能访问FF,FE,FD三个FLASH页面,亦即供48K的P_FLASH。访问变量时编译器也不会自动修改RPAGE和EPAGE寄存器,所以只能访问12K的RAM和2K的EEPROM,当然还有2K的寄存器空间,共64K空间。相信你把代码放到FD和FF空间也是没有问题的。

另外,在small模式下只是编译器不替你管理页面寄存器,如果你自己来控制页面寄存器仍然可以访问所有的空间。

返回列表