首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | 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寄存器内容的指令。程序员需要估计常量的大小,把很大的常量分解放置。

程序很大时,编译器也会自动将各函数放在不同的页,并在转换页时自动加入PPAGE寄存器操作指令,无需程序员关心。
海纳百川  有容乃大
不是很理解版主说的“程序员需要估计常量的大小,把很大的常量分解放置。”

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

版主能不能举个例说明下“程序员需要估计常量的大小,把很大的常量分解放置。”或告诉我怎么能看到烧写在PAGE_38等里面的汇编指令。
汇编指令可以通过调试界面看到。在“True-Time Simulator & Real-Time Debugger”界面中,汇编单步执行(Assembly Step), 在转换页面的时候,你就可以在“Assembly”窗口中看到插入的PPAGE操作指令。
海纳百川  有容乃大
最新发现。我的函数 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 )也是没有用啊
你在程序里和PRM文件中用SECTION定义了d[32]的页吗?
海纳百川  有容乃大
把你的常量固定在PAGE_3E,PAGE_3F中,那样就不会因为page改变而导致访问错误了
51,freescale,c,asm,protel,fpga
??为什么固定在PAGE_3E,PAGE_3F中就没有问题了??不是很明白。难道PAGE_3E,PAGE_3F不需要用到PC指针?
谢谢各位.我自己的问题已经解决了。只是不明白楼上的说法
PC从$4000~$7FFF:PAGE_3E
PC从$C000~$FFFF:PAGE_3F
这两个地址段的PAGE是固定的,不过你怎样改变你当前的PPAGE值,落在这两个区域内的PC值都会指向固定的数据单元。
而$8000~$BFFF是CPU开出的一个窗口,该区域内寻址需要PPAGE和PC共同来完成。
事实上,你对far数据类型进行操作时,编译器会在3E或3F内自动生产两个函数,每次对far类型的读写操作都是通过这两个函数来完成的,因为只有在3E和3F页内的程序才不会因为ppage值改变而是cpu访问到不同数据单元
如果楼主还是不明白的话,可以发邮件来交流:onion2829@gmail.com
51,freescale,c,asm,protel,fpga
受益非浅,多谢onion!
“对far数据类型进行操作时,编译器会在3E或3F内自动生产两个函数,每次对far类型的读写操作都是通过这两个函数来完成的,因为只有在3E和3F页内的程序才不会因为ppage值改变而是cpu访问到不同数据单元
”这段话真是经典
返回列表