C8051F12X存储大量常量代码的编译技巧

技术分类: 微处理器与DSP  | 2007-12-24
来源:单片机及嵌入式系统应用 | 作者:南京三宝科技集团公司 王效东

  3 生成HEX文件方法

  启动UV2集成开发环境,新建一项目,由于现在仪为4个ASM的常量代码表编译H

EX文件,器件可选包含32 KB以上ROM的任意一型号的51MCU。考虑到以后实际使用C8051F12X,可以直接选择C8051F12X。不必配置Code Banking的选项,在Output选项卡的CreateHEX File选项上配置.以创建HEX文件;同时,注意每次修改ASM都修改Name of Executable右边的文件名,以免后续HEX文件覆盖前次结果,如图1所示。

  分别将4个ASM文件加入项目中。每次只加入一个ASM文件,然后编译生成HEX文件,改换HEX文件名后移走原ASM文件,再加入新的ASM文件。这样就完成了4个HEX文件,设为B0.HEX~B3.HEX。

  在C8051F12X目标板系统连接好JTAG调试器并正确配置后,启动Silicon Laboratories的IDE集成开发环境,打开Debug菜单,选择Connect菜单项,以连接目标器件与IDE;然后选择该菜单下的Download Object File…,弹出Download对话框,对相关参数进行配置;最后单击Download按钮,完成4个BANK的相关HEX文件下载。4个BANK的参数配置如图2所示。

创建HEX文件

  KEIL UV2及Silicon Laboratories IDE只处理HEX描述的空间,其他空间维持原态,所以可以预先把基本不再修改的常量代码表下载到C8051F12X内,之后只须单独处理程序代码,但要保证程序代码空间不超越预先分配给常量代码的空间。在KEIL UV2的配置对话框中可以限制编译后的空间大小,如果源代码编译越界,则有错误提示,且不能创建相应的HEX文件,这有助于防止冲坏常量代码。

  打开原来的UV2项目文件,移出常量代码表ASM文件,加入程序文件(C文件或ASM文件),编译通过后就可直接调试,并可访问先前下载过的常量代码表数据。由图3可知,KEILUV2下显示的4个BANK内容确实为通过Silicon Laboratories IDE下载的相关HEX文件数据。

KEILUV2下显示的4个BANK内容确实为通过Silicon Laboratories IDE下载的相关HEX文件数据

  如果程序代码比较大,但只要不超过64KB,那么就可直接按非BANK方式编译。留给常量代码的空间相应要减少,可以使用BANK2和BANK3;BANKl中能用的常量代码空间取决于程序代码大小,地址必须高于程序代码最后字节地址。下面以C8051F126读取含32字节的数据块函数为例,代码如下:

代码

代码

  大量常量代码不局限于字库应用。作者开发的UHF段RFID系统,需要使用较多的C805lFl26的自带外设。其他51核MCU不加外扩无法满足要求,故选用由C8051F126为管理控制器,FPGA为信号处理器。其中,C8051F126内程序量只有18 KB,FPGA的固件有98 KB。为充分利用C8051F126,将FPGA的BIN数据存放到C805lFl26的4个BANK中,FPGA综合软件生成的文件是BIN方式的文件,所以我们自行设计了一套运行于PC的转换程序,输入FPGA的固件BIN文件后,自动按照配置的地址空间生成4个HEX文件,然后利用Silicon La-boratones IDE将这4个文件下载到C8051F126中。程序的函数从Flash中读取代码后配置FPGA。

  结语

  通过绕开KEIL C51对常量代码分配在COMMON区的限制,将常量代码分配到任意BANK的方法,解决了一些需要存储大量常量代码的固件程序员使用KEIL C51无法编译通过的问题。为许多带有中文液晶显示功能的系统提供了较好的设计参考思路。

0
0
(请您对文章做出评价)
1】【2
加载中

对文章的评论

更多评论

剩余字数:  

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销

  • 博客推荐

  • 论坛推荐

  • 在线研讨会