当前位置:首页 > 智能硬件 > 智能硬件
[导读]通过绕开KEIL C51对常量代码分配在COMMON区的限制,将常量代码分配到任意BANK的方法,解决了一些需要存储大量常量代码的固件程序员使用KEIL C51无法编译通过的问题。

Silicon Lahoratories公司的C8051F12X是与8051兼容,采用高速流水线工作方式,70%指令的执行时间为1个或2个系统时钟周期的高速集成混合信号SoC微控制器。片内调试电路提供全速、非侵入式的在片/在系统调试,支持断点、单步、观察点、堆栈监视器,可以观察/修改存储器和寄存器;使用内部集成PLL,时速度可达100MIPS或50MIPS;对于需要大量常量代码而又不想外扩ROM的系统设计,128KB的Flash是个很好的选择。


1 处理大量常量代码面临的困难
   
通常带中文液晶显示的系统采用的是不带中文字库的图形液晶显示模块,需要给点阵字库分配存储空间。常用的是16×16点阵字库,每个汉字占用32字节存储空间,64KB空间可存储2048个汉字。标准51MCU只能直接访问64KB程序空间,采用BANK技术可扩展空间,但处理编译复杂,且需要额外I/O口线作BANK选择控制。有的系统是将字库单独烧写到外部Flash中,而硬件接法上使用数据空间地址,但标准51 MCU数据空间也只有64KB,不进行分页外扩同样不能实现2048字以上的汉字存储。此外,程序运行也需要数据空间,实际字库容量更小。C805lFl2X具有完善的片上外设资源,8KB的片上RAM。特别是128KB的Flash资源,不必外扩存储器即可实现带较大容量的中文液晶显示字库的完整系统。
    KEIL C5l是目前最流行的51系列MCU编译器。
如果程序代码与字库常量代码总和不超过64 KB,则可在KEIL UV2的集成开发环境下,通过安装Silicon Laboratories公司的驱动程序直接对C805lFl2X进行编译,并通过JTAG调试仿真器实现不占用户资源的实时/断点调试。但当程序代码与字库常量代码总和超过64 KB时,在KEIL UV2下,只能采用BANK编译技术。常量默认设置是分配到低32 KB的COMMON区,而COMMON区还要存放中断处理等代码,因此如果想将点阵字库常量分配到指定的BANK,还需要采取其他方法。


2 处理大量常量代码的思路与实现
   
如果C8051F12X需要下载的程序代码与字库常量代码总和超过64 KB,则可使用Silicon Laboratories公司的集成开发环境。在此IDE中,C805lFl2X的Flash编程是分4个BANK进行的,每个BANK对应一个HEX格式的代码文件。根据这样的特点,可以绕开KEIL C5l编译器,直接把点阵字库或其他常量表格处理为标准HEX格式文件,从而实现常量代码在任意BANK的存放。
    假设一个点阵字库含3200个常用汉字,需要分配32×3200=102 400字节空间。设计上可以这样分配空间:BANKl及BANK2全部使用,各32 768字节,共可以存放2048个汉字的点阵。由于C805lFl2X最后1026字节为系统保留空间,所以BANK3分配990个汉字的点阵,占990×32=3l680字节,还剩162个汉字的点阵,需5184字节,分配到COMMON(BANKO)的最高端。BANKl~BANK3的起始地址都是由8000H开始的。对BANKO来说,162个汉字的点阵字库从613COH开始存放,这也意味着留给程序的空间不能超过27584字节。如果程序较大,但不超过64KB,同时字库不需要很大,则可分配63KB为字库,64 KB为程序(若程序用不完64 KB,则多余空间也可分配给字库,以扩大字库容量)。生成点阵字库的HEX文件,可采用ASM的DB定义方法、C51的数组定义方法或者自己编写运行于PC的程序的方法。前两种方式还需要经KEIL编译,但可灵活选择所需的汉字。从编译方面看,ASM的DB定义方式不需要额外设置编译参数,比C51的数组定义方法要好。通常字模软件都有ASM格式和C51格式的选择,可以利用其ASM格式输出,按上述空间分配原则,分别对每个BANK做对应的HEX文件。下面举例说明。假设使用4个ASM文件,每个都是64字节。B0.ASM内容是00H~3FH,存放于BANK0从7FC0H开始的空间;B1.ASM内容是40H~7FH,B2.ASM内容是80H~CFH,B3.ASM内容是DOH~FFH,BANKl~BANK3均存放于各自BANK从8000H开始的空间,物理上分别位于C8051F12X的8000H、10000H、18000H开始的区域。B0.ASM中的内容为:
    ORG 7FCOH
    DB 000H.001H,002H,003H+004H,005H,006H,007H
    DB 008H,009H,OOAH,00BH,OOCH,OODH,00EH,00FH
    DB 010H,011H,012H,013H,014H,015H,016H,017H
    DB 018H,019H,01AH,0lBH,01CH,01DH,01EH,0lFH
    DB 020H,021H,022H,023H,024H,025H,026H,027H
    DB 028H,029H,02AH,02BH,02CH,02DH,02EH,02FH
    DB 030H,03lH,032H,033H,034H,035H,036H,037H
    DB 038H,039H,03AH,03BH,03CH,03DH,03EH,03FH
    END;
    其他3个ASM文件格式一样,但ORG全部改为8000H,内容也相应替换。

3 生成HEX文件方法
   
启动UV2集成开发环境,新建一项目,由于现在仪为4个ASM的常量代码表编译HEX文件,器件可选包含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所示。
    KEIL UV2及Silicon Laboratories IDE只处理HEX描述的空间,其他空间维持原态,所以可以预先把基本不再修改的常量代码表下载到C8051F12X内,之后只须单独处理程序代码,但要保证程序代码空间不超越预先分配给常量代码的空间。在KEIL UV2的配置对话框中可以限制编译后的空间大小,如果源代码编译越界,则有错误提示,且不能创建相应的HEX文件,这有助于防止冲坏常量代码。
    打开原来的UV2项目文件,移出常量代码表ASM文件,加入程序文件(C文件或ASM文件),编译通过后就可直接调试,并可访问先前下载过的常量代码表数据。由图3可知,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无法编译通过的问题。为许多带有中文液晶显示功能的系统提供了较好的设计参考思路。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

成都2022年10月19日 /美通社/ -- 近期,平安养老险积极筹备个人养老金的产品设计和系统开发工作,发展多样化的养老金融产品,推动商业养老保险、个人养老金、专属商业养老保险等产品供给。 搭养老政策东风 ...

关键字: 温度 BSP 东风 大众

广东佛山2022年10月19日 /美通社/ -- 空间是人居生活的基础单元,承载着生存与活动的最基本功能。而对于理想空间的解构意义却在物理性容器之外,体现出人们对于空间和生活深层关系的思考,同时也塑造着人与空间的新型连接...

关键字: 温度 BSP 智能化 进程

上海2022年10月19日 /美通社/ -- 10月17日晚间,安集科技披露业绩预告。今年前三季度,公司预计实现营业收入7.54亿元至8.33亿元,同比增长60.24%至77.03%;归母净利润预计为1.73亿...

关键字: 电子 安集科技 BSP EPS

北京2022年10月19日 /美通社/ -- 10月18日,北京市经济和信息化局发布2022年度第一批北京市市级企业技术中心创建名单的通知,诺诚健华正式获得"北京市企业技术中心"认定。 北京市企业技...

关键字: BSP ARMA COM 代码

北京2022年10月18日 /美通社/ -- 10月14日,国际数据公司(IDC)发布《2022Q2中国软件定义存储及超融合市场研究报告》,报告显示:2022年上半年浪潮超融合销售额同比增长59.4%,近5倍于...

关键字: IDC BSP 数字化 数据中心

上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都银行集团成立60周年的纪念日。趁着首都银行集团成立60周年与首都银行(中国)在华深耕经营12年的“大日子”,围绕作为外资金融机构对在华战略的构想和业...

关键字: 数字化 BSP 供应链 控制

东京2022年10月18日  /美通社/ -- NIPPON EXPRESS HOLDINGS株式会社(NIPPON EXPRESS HOLDINGS, INC.)旗下集团公司上海通运国际物流有限公司(Nipp...

关键字: 温控 精密仪器 半导体制造 BSP

广州2022年10月18日 /美通社/ -- 10月15日,第 132 届中国进出口商品交易会("广交会")于"云端"开幕。本届广交会上高新技术企业云集,展出的智能产品超过140,...

关键字: 中国智造 BSP 手机 CAN

实际上函数指针本质也是一个指针,只不过这个指针指向的不是内存中的一段数据而是内存中的一段代码

关键字: 指针 数据 代码

要问机器人公司哪家强,波士顿动力绝对是其中的佼佼者。近来年该公司在机器人研发方面获得的一些成果令人印象深刻,比如其开发的机器人会后空翻,自主爬楼梯等。这不,波士顿动力又发布了其机器人组团跳男团舞的新视频,表演的机器人包括...

关键字: 机器人 BSP 工业机器人 现代汽车

智能硬件

22207 篇文章

关注

发布文章

编辑精选

技术子站

关闭