打印

〔求助〕有关外部ROM的使用问题

[复制链接]
2821|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wanghaibo1026|  楼主 | 2010-2-15 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
chunyang| | 2010-2-15 22:19 | 只看该作者
作为两个独立的程序分别编译并烧录在不同的ROM内,注意特别中断向量的处理,片选地址用普通IO即可。

使用特权

评论回复
板凳
wanghaibo1026|  楼主 | 2010-2-15 23:10 | 只看该作者
我想请问一下“作两个独立的程序”的意思是否将我的程序分成两块,但我怎样报一个主程序分成两块呢?这两个程序之间又将如何连接呢?能否请楼上的大虾,在指点一下,我的QQ号是:7255210,如果可以的话,能否用QQ请教一下。

使用特权

评论回复
地板
HWM| | 2010-2-15 23:33 | 只看该作者
没必要分成“两个独立的程序”,可以编译成二进制数据文件(BIN),将其视为数据分段写入ROM中。当然,建议使用内含EEPROM(或FLASH)的MCU比较方便。

使用特权

评论回复
5
wanghaibo1026|  楼主 | 2010-2-15 23:49 | 只看该作者
楼上大虾,我是用Keil C 编写的程序,输出只有一个hex,我怎样才能编译成二进制数据文件?

使用特权

评论回复
6
chunyang| | 2010-2-16 17:03 | 只看该作者
有HEX-BIN的转换程序,用该程序转换一下即可,但这么干更讲究工艺性,因标准51的寻址空间仅有64K,高于64K的程序代码需要用IO干预选址,如果前后劈开的位置不合适会导致运行崩溃,不如两段独立的程序控制起来方便,而且独立程序可根据功能性进行分割,再通过RAM交互数据、寻址等,不过使用大于64K的程序对初学者而言难度不小,非万不得已不宜用此招,过去这么做完全是因为资源不足,不得不用“小马拉大车”,现在可选择的资源非常丰富,最好换用可直接寻址的MCU,如16位甚至ARM等,C代码可轻松实现跨平台兼容。

使用特权

评论回复
7
wanghaibo1026|  楼主 | 2010-2-17 23:08 | 只看该作者
“chunyang” 您好,谢谢你的指点,我现在做的项目的是在公司以前做的一款产品上进行软件修改,硬件不修改,所以换单片机的可能性比较小,由于该产品的功能比较多,所以软件代码比较大(有92k),但由于写该软件的人已离开公司,所以不知道怎样操作。 看过你的提示后,我想再问一下:
1: 我的编译出的代码怎样分成两个,再烧入两片外部rom内;
2: 我怎样通过IO干预选址,能否告知详细一点。
我的QQ:7255210,你能否加我。谢谢!

使用特权

评论回复
8
wshwsh| | 2010-2-18 01:52 | 只看该作者
非常简单啊。。用任何一款16进制编辑器就可以分割!

使用特权

评论回复
9
不起眼| | 2010-2-18 09:29 | 只看该作者
keil支持band模式编程,也就是分块模式,最多支持64块。最大支持64×64K程序空间。具体可参看exampls\bank_ex1.uv2

使用特权

评论回复
10
QuakeGod| | 2010-2-19 00:27 | 只看该作者
另外,如果92K全部都是代码,处理比较麻烦,涉及到band切换问题
如果其中大部分是数据,则处理起来很简单,只是访问外部存储器的时候复杂一点点。
另外,即使采用band切换,一般来说,都是把64K分成两部分,比如两个32K,
前一部分是长期驻留可访问的,后一部分按照需要切换映射,就好像DOS里的EMS那样。

使用特权

评论回复
11
wanghaibo1026|  楼主 | 2010-2-20 10:49 | 只看该作者
谢谢大家的帮助,我再研究一下,如果不行再请教大家!

使用特权

评论回复
12
wanghaibo1026|  楼主 | 2010-2-22 14:52 | 只看该作者
我在使用keil 进行bank模式切换时,输出了两个  
    OBJECT FILE FOR BANK 0:  A07.B00  ,  
    OBJECT FILE FOR BANK 1:  A07.B01
怎样才能把这两个文件变成BIN文件

使用特权

评论回复
13
不起眼| | 2010-2-22 16:20 | 只看该作者
工程属性---输出---输出HEX文件

使用特权

评论回复
14
wanghaibo1026|  楼主 | 2010-2-23 08:32 | 只看该作者
楼上“不起眼”,我已在工程属性中设置HEX文件输出,只是在编译后输出:
          creating hex file from "A07.B00"...
               creating hex file from "A07.B01"...
  生成的两个文件,是*BOO文件,没有*BIN或*hex文件。

使用特权

评论回复
15
不起眼| | 2010-2-23 09:16 | 只看该作者
检查每个源程序文件的属性,并把它们分配到band内

使用特权

评论回复
16
wanghaibo1026|  楼主 | 2010-2-25 15:56 | 只看该作者
楼上“不起眼”, 每个源程序的属性已经分配到band内,只是在编译后生成的两个文件,是*BOO和*BO1文件,和两个*HO0,*HO1 文件没有*BIN或*hex文件。 是否需要转换工具(OH51),怎样转换? 急!

使用特权

评论回复
17
不起眼| | 2010-2-25 17:52 | 只看该作者
*.h00和*.h01就是你要的Hex文件

使用特权

评论回复
18
xwj| | 2010-2-25 18:14 | 只看该作者
要么用Bank(可以参照Keil的例子);要么学会分离数据和程序,把表格数据放到Xdata区

使用特权

评论回复
19
mohanwei| | 2010-2-25 20:20 | 只看该作者
是程序的话只能用bank模式来编程,256K都没问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

68

帖子

1

粉丝