8051微控制器的字节码解释器
N. Jeenjun S. Khuntaweetep and S. Somkuarnpanit
一 引言
要使用微控制器,用户必须了解其架构和语言。每个家庭的微控制器都有它自己的体系结构和指令集。例如PIC家庭是RISC和8051是CISC。当用户想要使微控制器的变化来支持新的微控制器,可帮助其他用户开发新的方案。
它是废时间,因为用户必须学习新的微控制器的架构和指令集,以及解释另一种方式的微控制器要解决的问题。当用户想要改变新微控制器,用户只安装解释新微控制器,但不写新的程序。
例如,对于字节代码的Java语言,Java作为由Sun Microsystems引入,在1994年已经传遍了整个计算机行业,并已传递到所有域。不过Java是提供“一次编写,运行无处不在“的软件。在图1中,程序员编写的Java项目。 Java编译器将编译Java程序的Java字节码。使用Java程序,用户需要安装Java虚拟机操作目标系统。如果用户要改变到新的操作系统,用户只需安装Java虚拟机和Java程序就可以正常运行。这种情况下的Java虚拟机就是Java系统解释器。
世界上人们最喜欢的玩具是乐高的头脑风暴。乐高积木解释器中有H8微控制器。用户接口是基于图形块。这很容易为初学者即使孩子们,都可以来开发自己的应用。为了解释的其他例子,由麻省理工学院MetaCricket开发的,GoGo电路板,通过BasicStamp视差,picoJava-Ⅰ和picoJava-Ⅱ,由Sun微系统的嵌入式Java虚拟机和字节代码固件设计组成的单片机。
二 系统比较
在图2中所描绘的标准的微控制器(MCU)语言设计,就是用户写入装配程序为目标MCU和编译每个系统的机器代码。在这情况下,用户必须为8051和PIC制定方案2。
在图3中,用户安装字节码解释器,既然后在8051和PIC单片机写入程序字节代码指令集。在这种情况下,用户写程序只有1次。
三 翻译框图
这里解释的MCU有3个部分,他们如图4被加以描述。VM控制器是翻译的核心,它控制读取/执行和状态的命令,IF,ELSE,REPEAT和GOTO。VM EXECUTE是字节码解码器。外围是硬件模块。它包括,并口,串口,I2C端口,定时器,液晶口和算术函数。
在图5 系统流程图描述中MCU后复位后,解释器从内置闪存取出字节码。条件1将被选中,不管它是正常的任务或任务的条件。如果是正常的任务,接下来的字节码会被解码为正常。如果不是,解释器之前会去下一个命令,检查情况。完成该操作之后,程序计数器
(PC)将被提高到下一行地址。
A.数据堆栈
解释器被设计成具有16级数据栈。该优势数据栈是,存储条件的结果指令值IF/ ELSE和WAITUNITL并从结果算术命令。 数据堆栈示例被描绘在图6中。 00,02,09,01,00,06,00,01,40,01,35,1C,0A 00,02:行程序地址 09:SUM
01:条件1(IF语句) 00:没有条件2
06:数字IF语句的奴隶 00:这是主线
01,40:推送数据40H到当前栈 01,35:数据推35至下一个栈 1C:比较均等字节码
0A:在堆栈比较数据和堆栈+1,结果将在堆。
B字节码格式
字节码格式由7份组成,图7中所描绘那样。 AddrH和ADDRL是16位地址线。(最大为65535行)
SUM使用字节中的每一行(ADDRL,AddrH和SUM不包括在内)
1是首要条件。 2是次要条件。
CondListH,在以下情况下,如果条件1不为00H 平等00H:这是从行地址。 不等于00H:这是主线地址。
CondListL,在以下情况下,如果条件1不为00H 平等00H:这是主线地址。 不等于00H:这是从行地址。
8位的命令。
C.Byte代码指令集
该指令集被归类为2个部分: 没有条件的命令
对于没有条件的命令,条件1将是00H,条件2 CondListH和CondListL将不会出现在行中。在图8中格式描绘实施例如对于本命令TX232,RX232,I2CSTART,I2CWRITE, LCD,WAITTIME,OUTPORT和INPORT。
命令条件
对于条件命令包括,IF,ELSE,REPEAT和GOTO。在图9中,格式条件1描绘会不会是00H和条件2为00h保留进一步使用。
解释器设计有8级IF和ELSE的命令。在图10中显示了3个级别IF命令和2ELSE命令的水平。对于IF命令,字节码01H-08H被保留,81H-88H是为IF行结束保留。 ELSE命令,字节码09H-0FH保留和ELSE行结束89H-8FH保留。
为重复命令,解释器被设计为8个水平。重复的数量可以是0-255。为重复命保留的令字节码是21H-28H。GOTO命令,它必须有标签。标签或地址可以是0000H-FFFFH。字节代码80H被保留用于GOTO命令。所有命令将在试验结果部分进行说明。
D.Memory分配
存储器分配在图11中进行描述,第一保留16KB用于解释器安装,第二个是用户代码区为16KB闪存或32K字节EEPROM作为配置设置。在本文中,用户代码区是16KB闪存 内存。
E.硬件
硬件测试系统是ETT-JR51USB[12]下面是规范的硬件。 AT89C5131单片机6时钟运行 32K字节闪存和1K字节的sram USB线下载程序
1xUART最大11520个基点 1个I2C端口 5VDC电源 四 测试结果
我们选择了一些字节代码示例来测试翻译。它包括I2C,RS232,LCD和并口与延迟时间。第一示例代码在图12中,该方案将产生I2C开始信号,写数据到I2C与5AH继而产生I2C停止信号。测试结果是在图13中描绘。
第一行00,00,02,00,4E 00,00:行地址 02:SUM
00:条件1(没有条件命令) 4E:写启动I2C信号
第二行00,01,04,00,01,5A,4A 00,01:行地址 04:SUM
00:条件1(没有条件命令) 01,5A:按数据5AH到数据栈 4A:数据堆栈数据发送到I2C 第三行00,02,02,00,4F 00,02:行地址 02:SUM
00:条件1(没有条件命令) 4F:写入停止I2C信号
第二个例子是在图14的程序中描述 从RS232信道接收数据,并发送相同的数据回到主机(个人计算机)。图15显示RS232 信号。
第一行00,00,06,64,00,00,05,00,01
00,00:行地址 06:SUM
64:条件1(标签命令) 00:没有条件2 00,05:标签栈位置 00,01:为去命令行地址 第二行00,01,02,00,14 00,01:行地址 02:SUM
00:条件1(没有条件命令) 14:读取RS232数据 第三行00,02,02,00,04,13 00,02:行地址 02:SUM
00:条件1(没有条件命令) 04:推RS232数据到数据栈 13:写数据从数据堆栈到RS232 第四行00,03,05,65,00,00,05,00 00,03:行地址 05:SUM
65:条件1(转到命令) 00:没有条件2
00,05:在堆栈单元05刷新标签 00:保留进一步用
第三个例子是在图16中,程序中描述将数据发送到并行端口,数据1,2,4,8,10H,20H,40H 80H并用400毫秒的延迟时间。测试结果在图17中描绘。 第一行00,00,06,64,00,00,05,00,01
00,00:行地址 06:SUM
64:条件1(标签命令) 00:没有条件2 00,05:标签栈位置 00,01:为去命令行地址 第二行00,01,04,00,01,01,4C 00,01:行地址 04:SUM
00:条件1(没有条件命令) 01,01:数据推01〜数据堆栈 4C:写入并行端口数据堆栈数据 第三行00,02,04,00,01,04,10 00,02:行地址 04:SUM
00:条件1(没有条件命令) 01,04:数据推01〜数据堆栈
10:延迟时间与数据数据乘以堆栈100毫秒 第四行00,03,04,00,01,02,4C 00,03:行地址 04:SUM
00:条件1(没有条件命令) 01,02:按数据02数据堆栈
4C:写入并行端口数据堆栈数据
其余程序将重复相同行1和2号线,但只有改变的数据出来。
最后一个例子是LCD命令,图18是程序,图19是测试结果。 第一线00,00,02,00,A2 00,00:行地址 02:SUM
00:条件1(没有条件命令) A2:初始液晶字节码指令 第二行
00,01,19,00,01,31,A0,01,32,A0,01,33,A0,01,34,A0,01,35,A0,01,36,A0,01,37,A0,01,38 A0,
00,01:行地址 19:SUM
00:条件1(没有条件命令) 01,31:推送数据31(字符“1”),以数据堆栈 A0:数据堆栈液晶写数据
01,32:推送数据32(字符“2”),以数据堆栈 A0:数据堆栈液晶写数据
01,33:推送数据33(字符“3”),以数据堆栈 A0:数据堆栈液晶写数据
01,34:推送数据34(字符“4”),以数据堆栈 A0:数据堆栈液晶写数据
其余的程序将数据写入LCD液晶屏“5678abcdefgh”。
A.结果分析:内存使用率
本文中,我们已经安装了字节码解释成8051(CISC)微控制器。翻译是用C语言与KEIL编译。表4.1是针对比较内存使用情况。
B.结果分析:提高速度
从前面的文章中,字节码固件单片机,用户程序存储与I2C协议inexternal内存
EEPROM。它是该系统的颈部,因为它从数据EEPROM1字节花了10个时钟周期来。在本文中,我们通过使用内置的问题改进了微控制器的闪存,只用了2个时钟周期来获取1个字节数据。
五 结论
根据测试的结果,即使我们改变从系统到PIC8051微控制器,解释器仍然可以执行正确命令的字节代码。事实证明独立硬件的概念就是执行字节码指令通过改变外部存储器,内部闪存提高内存。进一步的就是减少解释器代码大小和速度的提高,我们可以用汇编语言,而不是C语言。最后:检查字节代码的语法,编译的应制定为好。
六 参考
[1] S. Wilson and J. Kesselman, “Java platform perform ance strategies and tactics”, Addison-Wesley, Boston, 2000.
[2] T. Lindholm and F. Yellin, “The Java virtual machine specification”,Addison-Wesley, Reading, Mass., 1997.
[3] Jin Sato, “LEGO MINDSTORMS: The Master's Tech nique”,O'Reilly Media, Inc.,2008.
[4] F.Matin, B.Mikhak, B.Silverman, “MetaCricket: A de signner’s kit for making computational devices”, IBM Systems Journal, Vol. 39, NOS3&4, 2000.
[5] Arnan (Roger) Sipitakiat, “GOGO BOARD”, Available from: http://www.gogoboard.org [6] Al Williams, “Microcontroller Projects Using the Basic Stamp”, CMP Books, 2002. [7] Sun Microsystems, “picoJava-I: picoJava-I Core Micro processorArchitecture”, Sun Microsystems white paper, October 1996.
[8] Sun Microsystems, “picoJava-II: Java Processor Core”, SunMicrosystems data sheet, April 1998.
[9] Graham Mathias, Kenneth B. Kent “An Embedded Java Virtual Machine Using Network-on-Chip Design”, IEEE Int. Workshop on Rapid System Prototyping, 2006.
[10] Kenneth B. Kent, Micaela Serra, “Hardware/Software Co-Design of a Java Virtual Machine”, IEEE, 2000.
[11] Narakorn Jeenjun, “The Byte code Firmware Design for Microcontroller Device”, KKU Journal, Vol 34, Page 535-546, 2007.
[12] ETT-JR51USB Board Available from: www.ett.co.th
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务