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

请问strongchen 我用d64可以用banked模式的么

请问strongchen 我用d64可以用banked模式的么

我用的是d64片子,用的small模式。程序已经超过16k,提示out of allocation space in segment ROM_C000 ad address 0xFEFE 错误。


我按你说的用#pragma CODE_SEG OTHER_ROM放在子程序前,可是进去后,单步调试不了,但全速是可以的。


而我用banked模式既没有提示错误也可以单步调试,


请问我可以用banked模式的么,它们两者有什么关系啊。请指教,不胜感激。


 

small模式和banked模式的主要区别是,在small模式下调用子程序或函数时,不会对PPAGE寄存器进行操作,而在banked模式下,就会采用包含PPAGE操作的指令。其实它们没有太大的区别。你说的现象很奇怪。如果愿意,你可以将project打包贴出来,或发到我的信箱:strongchen_free@yahoo.com.cn。
海纳百川  有容乃大
老大我已经给你发的了
strongchen  我们可以qq聊的么,如果你不忙的话加我40478183
老大我已经给你发的了
我已经看过你的程序了。当程序超过16K,即一页的空间,需要换页,而又不想对每个函数都申明其页时,最简单的方法就是采用banked的模式。如果一定要用small模式,就必须在放入OTHER_ROM的程序前加一个申明:

#pragma CODE_SEG __PPAGE_SEG OTHER_ROM

这样编译器就会自动加入PPAGE的操作指令。
另外,此时必须将main函数放入DEFAULT,即3F页,因为Startup代码是放入这一页的,而Startup前并没有__PPAGE_SEG的申明,所以不会加PPAGE的操作指令,此时从Startup程序跳转至main时就会出问题。

总的来说,如果用Banked方式,就没有问题了。

另外我把两种模式的project都发给你了,供你参考。
海纳百川  有容乃大
谢谢老大,终于明白了,可以用的了
可你给我发的我好象没有收到,不过已经明白了我自己来搞定了
返回列表