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

求教flash越段操作问题

求教flash越段操作问题

我用S12DG128B的芯片,目前程序量已经达到40几K了。其中用到了ROM_4000,PAGE_38,PAGE_39,PAGE_3A。各段之间进行程序调用都没什么问题。但在越段进行常量调用时出现问题。我的LCD显示程序和对应的汉字代码主要是在PAGE_39里面,但有些汉字代码是在PAGE_3A里。结果显示PAGE_39里的汉字没问题,显示PAGE_3A里的就出现乱码(估计是去读PAGE_39里的相应地方了)。我把所以的汉字代码都放在ROM_8000里就完全乱码了。根据以上现象,我觉的主要是PC指针没调过来,而调用了同一段即PAGE_39里的相应地址的东西了。
于是想向高手们请教下,如何解决越段超作的这个问题。另外由于我的程序量较大,将来还可能越BLOCK(即从一个64K到另一个64K)操作,顺便请教下(劭老师的书里只讲了GCC情况下如何解决,codewarrio下如何解决没有说 -w- )。
不是很理解版主说的“程序员需要估计常量的大小,把很大的常量分解放置。”

我一开始也想过看编译后的汇编指令是否有自动加入改变PPAGE寄存器内容的指令。可是用$99的仿真器后(就是那个用USB的能调试s08和S12的)在hiwave里法看到除烧写在ROM_4000,ROM_8000以外的汇编指令了。

版主能不能举个例说明下“程序员需要估计常量的大小,把很大的常量分解放置。”或告诉我怎么能看到烧写在PAGE_38等里面的汇编指令。
最新发现。我的函数 void a (uint x, uint h[32] )是在PAGE_38里的。主程序中调用a的函数 a(6,d[32])也是在PAGE_38里。但是d[32]在PAGE_39里。

系统编译时主程序调用a是有用CALL XXX,#38 切换到PAGE_38里。在a中 x为整型局部变量,h[32]被编译成整型的指针。但是在a里需要用到d[32]里的内容时却是指向PAGE_38里的地址。

我认为是h[32]被编译成整型的指针时未指定其对应的块。不知道是否是我函数定义的不对,还是调用函数的方法不对。请版主指教。
我试了下用 void a (uint x, uint h[32]  far )也是没有用啊
??为什么固定在PAGE_3E,PAGE_3F中就没有问题了??不是很明白。难道PAGE_3E,PAGE_3F不需要用到PC指针?
谢谢各位.我自己的问题已经解决了。只是不明白楼上的说法
受益非浅,多谢onion!
“对far数据类型进行操作时,编译器会在3E或3F内自动生产两个函数,每次对far类型的读写操作都是通过这两个函数来完成的,因为只有在3E和3F页内的程序才不会因为ppage值改变而是cpu访问到不同数据单元
”这段话真是经典
返回列表