Board logo

标题: 请问strongchen 我用d64可以用banked模式的么 [打印本页]

作者: fdp123456    时间: 2006-11-18 11:56     标题: 请问strongchen 我用d64可以用banked模式的么

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


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


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


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


 


作者: strongchen    时间: 2006-11-20 10:57

small模式和banked模式的主要区别是,在small模式下调用子程序或函数时,不会对PPAGE寄存器进行操作,而在banked模式下,就会采用包含PPAGE操作的指令。其实它们没有太大的区别。你说的现象很奇怪。如果愿意,你可以将project打包贴出来,或发到我的信箱:strongchen_free@yahoo.com.cn。
作者: fdp123456    时间: 2006-11-20 17:07

老大我已经给你发的了
作者: fdp123456    时间: 2006-11-20 17:12

strongchen  我们可以qq聊的么,如果你不忙的话加我40478183
作者: fdp123456    时间: 2006-11-20 18:26

老大我已经给你发的了
作者: strongchen    时间: 2006-11-21 10:29

我已经看过你的程序了。当程序超过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都发给你了,供你参考。
作者: fdp123456    时间: 2006-11-22 15:44

谢谢老大,终于明白了,可以用的了
可你给我发的我好象没有收到,不过已经明白了我自己来搞定了




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0