CN105204393B - 基于虚核单片机的单片机生产研发工具及其实现方法 - Google Patents

基于虚核单片机的单片机生产研发工具及其实现方法 Download PDF

Info

Publication number
CN105204393B
CN105204393B CN201510498135.XA CN201510498135A CN105204393B CN 105204393 B CN105204393 B CN 105204393B CN 201510498135 A CN201510498135 A CN 201510498135A CN 105204393 B CN105204393 B CN 105204393B
Authority
CN
China
Prior art keywords
chip microcomputer
empty core
code
instruction
core single
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201510498135.XA
Other languages
English (en)
Other versions
CN105204393A (zh
Inventor
彭增金
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN201510498135.XA priority Critical patent/CN105204393B/zh
Publication of CN105204393A publication Critical patent/CN105204393A/zh
Application granted granted Critical
Publication of CN105204393B publication Critical patent/CN105204393B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B19/00Programme-control systems
    • G05B19/02Programme-control systems electric
    • G05B19/04Programme control other than numerical control, i.e. in sequence controllers or logic controllers
    • G05B19/042Programme control other than numerical control, i.e. in sequence controllers or logic controllers using digital processors
    • G05B19/0423Input/output
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B2219/00Program-control systems
    • G05B2219/20Pc systems
    • G05B2219/23Pc programming
    • G05B2219/23445Real time simulation

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Automation & Control Theory (AREA)
  • Microcomputers (AREA)

Abstract

本发明提供了一种基于虚核单片机的单片机生产研发工具及其实现方法。所述单片机生产研发工具包括主处理器、计算机接口、单片机调试下载接口;主处理器包括有用户程序库、数据存储器、程序存储器、虚核单片机、虚核单片机程序装载单元;虚核单片机作为自定义开发应用软件接口,提供有预先定义的指令集,实现多方软件合作开发;所述虚核单片机程序装载单元,用于从外部存储器或计算机装入虚核单片机程序至虚核单片机程序存储器;虚核单片机具体包括虚拟运行单元、虚核单片机数据存储器和虚核单片机程序存储器。本发明使单片机生产研发工具能像智能手机一样,能够安装用户或第三方开发的应用软件,实现支持更多类型的单片机及支持用户个性化的功能。

Description

基于虚核单片机的单片机生产研发工具及其实现方法
技术领域
本发明涉及单片机生产研发技术领域,尤其涉及一种基于虚核单片机的单片机生产研发工具及其实现方法。
背景技术
单片机,又称微控制器(MicroController、MCU),是一种把处理器内核CPU、程序存储器Program Memory(目前主流技术为FLASH存储器)、数据存储器Data Memory(目前主流技术为SRAM)、外设Peripherals(如定时器Timer、通用输入输出管脚GPIO、ADC、UART通讯接口等)集成在一个芯片上的集成电路。广泛用于智能电子产品作为控制核心。
单片机通常还具有调试仿真接口,有的还具有专门的烧录下载接口。比如STM32F103芯片,具有SWD/JTAG口作为调试仿真接口,另外还可以通过UART1串口进行烧录下载。调试仿真接口必须具有烧录下载的功能,而烧录下载接口不必须具有调试仿真功能。调试仿真接口和烧录下载接口统称为调试下载接口。一种调试下载接口,包含物理连线、电平、数据调制方式、数据编码格式等几个方面的特性,举串口UART为例,物理连线被定义为有地线GND、数据发送线TXD、数据接收线RXD,电平在单片机端一般为TTL/CMOS电平,数据调制方式为NRZ,编码格式为异步自时钟方式,包括起始位、数据位、奇偶校验位、停止位。另外举SWD调试下载接口为例,物理连线被定义为有地线GND、时钟发送线SWDCK、双向数据传输线SWDIO,电平为TTL/CMOS电平,数据调制方式为NRZ,编码格式为同步方式,数据包格式包括Start、APnDP、RnW、A[2:3]、Parity、Stop、Park、Trn、ACK[0:2]、WDATA[0:31]、RDATA[0:31]等。
单片机的调试下载接口,还具有各自专门的调试下载通讯协议,规定了命令和数据的的数据包格式、接收和发送的规则。
单片机生产研发工具,指以单片机或单片机产品作为工作目标,通过调试下载接口连接到目标单片机,按照单片机的调试下载通讯协议,操作目标单片机,进行代码烧录、调试仿真、代码升级的工作的工具。比如STM公司的ST-Link In-circuit debugger andprogrammer,是一种用于STM公司的STM32系列芯片,进行研发用的工具,通常称为仿真器或调试器,通过STM32芯片的SWD/JTAG仿真调试接口连接到STM32芯片,仿真器和调试器也具有代码烧录的功能,但一般需要连接计算机系统,配合计算机上位机软件来工作,比如ST-Link有专门配套的stvd调试软件和stvp烧录软件。ST-Link的规格书http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manu al/CD00221563.pdf。ST-Link具有windows命令行接口,用户可以通过编写windows批处理文件,实现自定义功能开发,ST-Link的命令行接口说明书《UM0892:STM32ST-LINK Utilitysoftware description》http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manu al/CD00262073.pdf。研发用工具通常价格较低。
其他常见的单片机及对应的调试下载接口:PIC公司的PIC单片机(ICSP接口)、ATMEL公司的AVR单片机(比较多样化,有SPI串行烧录接口、JTAG调试接口、debugWIRE调试接口、并口烧录接口等)、FreeScale(Motorola)公司的HCS08单片机(BDM接口)、TI公司的MSP430单片机(JTAG接口、SBW接口、串口接口)、STM公司的STM8单片机(SWIM接口)、Silabs公司的C8051单片机(C2S接口、JTAG接口)。
针对单片机产品的批量生产的烧录工作,一般使用量产用烧录器。因为追求稳定性和速度、操作便利性,量产用烧录器价格要高的多。商品化的量产用烧录器,通常也支持很多种单片机芯片,其接口也可以适应不同单片机的调试下载接口(包括适应物理连线、电平、数据调制方式、数据编码格式等方面)。
单片机生产研发工具,内部也都是采用单片机作为核心。其软件,都有共通的几个部分,如硬件相关的部分如显示、与电脑的通讯、数据文件的存取等,和调试仿真烧录通讯接口的相关部分(通过SWD JTAG BDM SPI SBW UART等调试下载接口与目标单片机的通讯,可以称为接口协议软件),和操作目标单片机(存储器、处理器核心)的部分(可称为芯片操作软件)。后面2个部分,随目标单片机不同而不同。
由于单片机种类繁多,世界上总计有数百家厂家,数千个系列,数万种芯片。且不断增加新种类。单片机生产研发工具作为单片机不可缺少的配套工具,也需要不断开发。目前来说,研发工具如调试器仿真器,芯片厂家一般会提供相应的低价格工具。而生产烧录工具,研发成本高,研发周期长,一般由第三方烧录器厂家提供。这就要求第三方厂家不断开发新的型号,或者为老型号不断更新固件,以支持新的单片机。而接口协议软件和芯片操作软件,需要芯片厂家提供芯片的相关技术资料,有时芯片厂家因保密需要,不能随意提供。
对于单片机生产研发工具如仿真器、烧录器等,现有技术都是由生产厂家编写软件,提供给用户使用,仅提供图形界面给用户进行简单的自定义配置。有少数产品利用脚本语言,让用户进行自定义配置。图形界面具有最友好的易用性,但不能实现复杂的功能。脚本语言能实现相对复杂的功能,但是用户需要学习使用脚本语言,而且脚本语言是一种高级语言,需要工具使用资源丰富的处理器,提高了成本。
在某些场合,目标单片机芯片的调试下载接口和通讯协议的定义,由单片机芯片生产厂家保密,工具生产厂家无法获取,造成单片机生产研发工具无法支持该芯片厂家的芯片。在某些场合,最终用户也有一些个性化的特殊功能需要,比如自定义一些防止拷贝的加密算法等,用户希望保密这些自定义算法,此时最终用户只能自行生产单片机生产研发工具,而不能利用现有的商品化工具。
满足以上需求,需要采取多方合作开发软件的方式。最简单的方式,工具生产厂家可以提供厂家软件的源代码或二进制库,给用户和用户的软件一起编译、链接。然而,这种合作开发方式,通常只能用于企业内部多个工程师合作开发软件,而不适应多个企业合作开发软件。因为工具生产厂家不会愿意泄露自己的软件代码,严重伤害商业利益。即使签订保密合同,用法律手段来保密厂家的软件代码,由于用户数众多,厂家实际上无法就泄密来举证。多个利益方合作开发软件,需要有软件保密的技术手段和机制,以保证工具生产厂家的软件代码不被用户获取。
至于防止厂家泄露第三方或用户开发的软件代码,可以基于厂家的自律和签订保密合同来保证。不在本发明的讨论范围。
为便于理解,我们可以观察现在流行的智能手机和以前的功能机。功能手机的时代诺基亚是代表性厂家,功能手机的所有软件,都是诺基亚这样的厂家预先开发好的,用户只能使用预定的功能,而不能像智能手机一样,安装App来实现不同的用户需求。
智能手机如安卓手机,采用了JAVA技术及相应的JAVA开发语言。App应用软件开发者利用安卓系统提供的系统接口(API),调用系统软件库、系统服务,实现多姿多彩的应用,如微信、qq、支付宝、各种游戏等。如果需要安卓手机厂家去开发各种各样的应用软件,工作量太大,投入太大,也存在诸多知识产权、技术秘密、商业机密的问题。JAVA虚拟机的代码是特别的一种二进制字节码,并不是任何一种处理器的指令集。其主要目的是使应用程序能跨平台实现兼容,单片机工程师通常不熟悉JAVA。
安卓系统的虚拟机,需要智能手机的处理器具有强大的功能和高的运行速度,并且需要硬件的CPU支持虚拟化(包括系统特权级别、MMU内存分页保护机制)。且开发语言JAVA之类,对于单片机生产研发工具的目标用户单片机工程师而言,如果应用JAVA之类的技术作为开发的用户接口,需要额外学习,或者单片机工程师与JAVA开发工程师组成团队,进行开发
另外,智能手机的操作系统属于消费电子产品的系统,稳定性可靠性,达不到工业产品的要求。工业产品必须采用工业级操作系统。
因此在单片机生产研发工具中应用像智能手机一样的虚拟机技术或操作系统,实现多方开发软件的目的,存在成本、功耗、开发环境、可靠性等等问题。导致现有的单片机生产研发工具,虽然作为单片机的必要配套工具,有数十年的历史,但都需要生产厂家开发所有的软件,而没有应用多方合作开发软件的机制,造成目前主要工具生产厂家的通用烧录器产品,国外的如SMH、DATAIO、elnec,国内的如河洛、xeltek等,产品售价高达1W甚至2W以上,其中主要成本在于需要聘用一批单片机开发工程师,去开发、测试、维护各种芯片的支持软件,导致人力资源支出很高;并且取得单片机芯片的烧录时序,也需要付出费用等成本,反而产品本身的硬件成本并不高。
进一步的,对于每一种单片机芯片,虽然烧录时序相同,但每一个工具生产厂家,都需要在自己的产品中,针对这种芯片编写支持软件,并且还要进行调试、可靠性测试、后期维护等工作,也造成人力资源的严重浪费。
发明内容
本发明的目的在于提供一种基于虚核单片机的单片机生产研发工具及其实现方法,使单片机生产研发工具能像智能手机一样,能够安装用户或第三方开发的应用软件,实现支持更多类型的单片机以及支持用户个性化的功能。
本发明的目的是通过以下技术方案实现的。
一种基于虚核单片机的单片机生产研发工具,包括主处理器,以及分别与所述主处理器连接的计算机接口、单片机调试下载接口,其通过单片机调试下载接口连接到目标单片机、通过计算机接口连接到计算机;
所述主处理器中具体包括有用户程序库、数据存储器、程序存储器、虚核单片机、虚核单片机程序装载单元;所述虚核单片机作为自定义开发应用软件接口,提供有预先定义的指令集,以此指令集为依据运行二进制代码,实现多方软件合作开发;所述虚核单片机程序装载单元,用于从外部存储器或计算机装入虚核单片机的机器码或机器码转换过后的执行码至虚核单片机程序存储器;
所述虚核单片机具体包括虚拟运行单元、虚核单片机数据存储器和虚核单片机程序存储器;其中,
所述虚拟运行单元,用于从虚核单片机程序存储器中读取执行码,通过系统调用接口调用所述用户程序库,完成所述目标单片机的生产或研发工作;
所述虚核单片机程序存储器和虚核单片机数据存储器,其存储资源从所述数据存储器和程序存储器中划分而来,分别用于存储虚核单片机的执行码和运算数据。
优选地,所述单片机生产研发工具具体为:单片机编程器、单片机升级下载器、单片机仿真器或单片机调试器。
优选地,所述虚核单片机的指令集为8051、PIC、AVR、ARM、STM8或6502指令集,以供不同用户选择使用。
优选地,所述虚拟运行单元,用于以逐条读取虚核单片机代码、逐条解释执行的方式执行虚核单片机代码;
或者以预先把虚核单片机代码转换成执行码,再逐条读取执行码、逐条解释执行的方式执行虚核单片机代码;
或者预先把虚核单片机代码转换成符合主处理器系统的指令集的执行码,直接运行。
优选地,所述虚拟运行单元,用于由预先检查过程,将虚核单片机代码的部分指令替换成指令模拟程序的入口指令,再直接运行替换过的半实化代码;在所述预先检查过程中,采用逐条检查方式。
优选地,所述虚拟运行单元,还用于在所述预先检查过程中,基于指令段来进行检查以提高保留比率。
优选地,所述单片机生产研发工具还包括外部存储器芯片、显示屏、喇叭、指示灯和/或供电模块。
一种如上任一所述单片机生产研发工具的实现方法,包括步骤:
在主处理器中定义一虚核单片机,从本主处理器的存储资源中为该虚核单片机分配虚核单片机程序存储器和虚核单片机数据存储器的存储空间;所述虚核单片机提供有预先定义的指令集;
由用户自定义开发虚核单片机代码,从外部存储器或计算机将其装入虚拟单片机的虚核单片机程序存储器中;
从虚核单片机程序存储器中读取并执行用户编写、编译的虚核单片机二进制代码,通过系统调用接口调用内部资源,完成目标单片机的生产和研发。
优选地,该方法中,所述执行虚核单片机代码的方法具体为:
以逐条读取虚核单片机代码、逐条解释执行的方式执行虚核单片机代码;
或者,以预先把虚核单片机代码转换成执行码,再逐条读取执行码、逐条解释执行的方式执行虚核单片机代码;
或者,预先把虚核单片机代码转换成符合主处理器系统的指令集的执行码,直接运行;
或者,由预先检查过程,将虚核单片机代码的部分指令替换成指令模拟程序的入口指令,再直接运行替换过的半实化代码;在所述预先检查过程中,采用逐条检查方式。
优选地,该方法还包括:在所述预先检查过程中,基于指令段来进行检查以提高保留比率。
本发明实施例的单片机生产研发工具可通过虚核单片机实现多方软件合作开发,具有以下优点:
本发明使单片机生产研发工具的厂家可以在保证技术秘密的前提下,提供软件资源,给第三方开发者或用户自行开发单片机芯片相关的软件,从而降低工具的软件成本,增加工具所支持的芯片种类,并且不需要采用有硬件特权级、MMU内存保护的处理器。第三方开发者或用户自行开发的软件,也可以在多家工具厂家的产品上安装运行(当然前提是各家的产品都支持统一的虚核单片机接口和用户程序库接口)。由于老牌的工具厂家大多在西方发达国家,本发明的技术获得实际应用,有望实现单片机生产研发工具的市场大洗牌,大幅降低工具售价,将令我国在单片机生产研发工具领域,超越西方发达国家,间接的帮助我国的单片机芯片产业的发展。
附图说明
图1是本发明实施例提供的单片机生产研发工具的硬件结构图;
图2是本发明实施例提供的单片机生产研发工具的实现方法流程图;
图3是本发明实施例提供的虚核单片机代码的第一种执行方法流程图;
图4是本发明实施例提供的虚核单片机代码的第二种执行方法流程图;
图5是本发明实施例提供的虚核单片机代码的第三种执行方法流程图;
图6是本发明实施例提供的虚核单片机代码的第四种执行方法流程图;
图7是本发明实施例提供的CPU核心寄存器的架构示意图;
图8是本发明实施例提供的CPU核心寄存器的位分布示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
由于成本、功耗、可靠性等限制,单片机生产研发工具不适合采用JAVA等虚拟机。单片机生产研发工具的第三方或用户,一般也不懂JAVA等语言,而只熟悉单片机的开发。
因此本发明提供一种单片机生产研发工具,特征是提供虚核单片机作为自定义开发应用软件的接口。本发明还揭示了在单片机生产研发工具应用虚核单片机的方法。
虚拟处理器,又称为指令集模拟器,具有指令集转换的功能和特性,是现有技术利用虚拟处理器的依据。虚拟处理器提供一个逻辑的实体,使应用软件开发者按照虚拟处理器定义的指令集、存储资源、内部资源,来开发软件。虚拟处理器的存储器地址空间和主处理器的存储器地址空间,属于不同的逻辑地址空间,实现虚拟处理器时会把主处理器的部分存储器分配给虚拟处理器,使两者的逻辑地址空间实现物理重合。虚拟处理器只能访问分配给它的存储资源,虚拟处理器的开发者,甚至不知道他开发的软件所运行的处理器,其实是虚拟的,从而无法接触到主处理器系统的存储资源。这表现为“逻辑隔离”特性。举例来说,ARM指令集中的LDR R1,[R0]指令,以R0寄存器中的数据作为地址,从SRAM空间读取4字节数据到R1寄存器中,如果这条指令是在虚拟处理器的代码中出现,会被虚拟处理器转换成读取分配给虚拟处理器的数据存储器中的数据单元,但如果R0中的地址落在虚拟处理器预先定义的地址范围外,会视为错误,中断虚拟处理器的执行,或装入缺省数据比如0。本发明正是利用了虚拟处理器的这种“逻辑隔离”特性。
单片机生产研发工具,指通过单片机调试下载接口,连接到目标单片机或单片机系统,对目标单片机进行操作的生产工具或研发工具。如单片机编程器、单片机升级下载器、单片机仿真器、单片机调试器。
如图1所示,本发明的单片机生产研发工具包括:主处理器,以及分别与所述主处理器连接的计算机接口、单片机调试下载接口,其通过单片机调试下载接口连接到目标单片机、通过计算机接口连接到计算机。主处理器中具体包括有用户程序库、数据存储器、程序存储器,还定义有一虚核单片机、虚核单片机程序装载单元;虚核单片机作为自定义开发应用软件接口,提供有预先定义的指令集,以此指令集为依据运行二进制代码,实现多方软件合作开发;所述虚核单片机具体包括虚拟运行单元、虚核单片机数据存储器和虚核单片机程序存储器。下面将分别进行详细描述。
虚核单片机,是指虚拟处理器和分配给虚拟处理器的存储器的集合。主处理器中可以存在多个虚核单片机,可以同时运行,也可以依次运行,多个虚核单片机可以是同一种指令集,也可以是不同指令集。存储器是指从单片机生产研发工具中使用的主处理器中,划分存储资源作为虚核单片机的数据存储器和程序存储器,以预先约定的指令集为依据,由软件(称为虚拟运行单元)来模拟执行虚核单片机的二进制机器码,而实现的处理器系统。根据模拟执行的流程,传统虚核单片机可以分为3种类型,分别如图3、图4、图5所示,本发明还揭示了半实化虚核单片机的虚核单片机执行方法,如图6所示。
用户,可以包括最终用户,和单片机芯片的生产厂家、第三方合作软件开发者等中间用户。
自定义开发,是指用户利用用户自己的技术资源、知识,编写虚核单片机的代码,并将编译产生的代码作为本发明工具的应用软件,从而满足用户自己特有的需求。
单片机生产研发工具的用户,都熟悉单片机的开发工作,因此定义一个虚核单片机,提供给用户作为自定义开发的接口,既能实现所有复杂的功能,用户也可以使用熟悉的单片机开发语言和开发环境、开发工具链,无需额外多作学习。而虚核单片机,是一种虚拟处理器,具有逻辑隔离特性,保证了工具生产厂家的代码,不会泄露给芯片生产厂家和用户。工具生产厂家也可以更改工具主处理器系统的设计,而保持用户开发的代码的重用性。
应用虚核单片机作为用户开发接口,实现多方软件合作开发,不适合应用在除单片机生产研发工具以外的电子产品中。因为对于大多数的应用场合,JAVA等虚拟机,具有更强的功能,更友好的开发环境,更易学易用的开发语言。很明显,用虚核单片机来实现如微信、支付宝钱包等要求丰富资源、强大性能的应用软件,是不适合的;即使是除了单片机为工作目标外的其他简单的应用软件,由于需要额外学习单片机的开发语言和环境,也不适合使用虚核单片机作为用户开发接口。
单片机调试下载接口,是连接到单片机生产研发工具的目标芯片的电信号接口。例如STM32芯片的SWD接口、STM32芯片的串口接口、STM8S芯片的SWIM接口、NXP的LPC17xx芯片的串口接口、TI的MSP430芯片的SBW接口或JTAG接口、MicroChip的PIC芯片的ICSP接口。有的单片机芯片支持多种烧录接口,有的芯片烧录接口和仿真调试接口是分开的,具体由芯片厂家规定。单片机芯片的厂家规定好了目标单片机接口的物理连线、电平、数据调制方法、数据编码格式,以及通讯协议,单片机生产研发工具需要按照规定协议与目标单片机通讯。该单片机调试下载接口对应的底层驱动软件,一般会由厂家编写好,作为内部资源提供给用户的虚核单片机代码调用;在利用半实化虚核单片机的IO映射的情况,可以由用户自行编写。
虚核单片机的虚拟运行单元,读入用户编写、编译的虚核单片机二进制代码(机器码),通过系统调用接口调用内部资源,完成单片机生产或研发工作。
虚核单片机的指令集,需要是市场上已有的、常见的指令集,如8051、PIC、AVR、ARM、STM8、6502等。这样才有现成的、成熟的、用户熟悉的开发环境(编译器、汇编器、教材等)。工具厂家自定义一种指令集,在理论上是可行的,但是需要厂家提供开发环境,即使提供了配套的开发环境,用户也不熟悉,不乐于使用。
单片机生产研发工具,可以提供多种指令集的虚核单片机,供不同用户选择各自熟悉的使用。
虚核单片机,按照执行方式,可以是完全解释型的,即逐条读入虚核单片机的机器码,按照指令集和系统调用接口进行解释,实现指令功能;也可以是预先转换型的,即在运行虚核单片机之前,把机器码区分指令和常数,并将指令进行转换,转换为便于解释的编码,甚至是转换为主处理器系统可以直接运行的指令;
对于预先转换型的虚核单片机,通常需要区分指令和常数。可以采用PIC16单片机的指令集作为虚核单片机的指令集,所有机器码都是指令,从而简化预先转换工作。
所述内部资源,即用户程序库(User Library),为完成运算功能或输入输出功能的代码库。系统调用接口,为预先定义的子程序或函数调用方式。比如把SWD、串口、JTAG、SPI等与目标单片机通讯的协议封装成函数,供虚核单片机的代码通过系统调用接口调用,方便第三方用户开发。其他可以封装进内部资源单元的函数,举例来说:与计算机通讯的单元、显示输出键盘输入等人机交互单元、存取数据文件的文件系统单元、数据加密与解密的单元、
虚拟处理器技术的指令集兼容特性,对本发明的单片机生产研发工具而言,是无关紧要的。所以本发明也所提出半实化虚核单片机,即运行虚核单片机之前进行预先安全检查过程,将部分指令视为安全指令,原样保留在主处理器上直接运行,而对主处理器的安全性有潜在影响可能的指令,进行指令替换,替换为指令模拟程序的入口调用指令,由指令模拟程序在运行时进行安全检查并模拟实现其指令功能。
本发明的单片机生产研发工具,可以调用虚核单片机运行应用软件,之后不再退出,由应用软件实现所有工作任务。也可以调用虚核单片机运行应用软件,完成某个任务(比如一次烧录动作、或一次目标单片机的读写操作)后,退出到主处理器系统继续运行主处理器的软件模块。
进一步的,主处理器系统的部分IO资源所在的地址,预先约定允许虚核单片机代码的指令直接访问该地址,或按照预先的约定映射到另外一个地址,称为映射IO资源。未预先约定为映射IO资源的IO资源,对虚核单片机不可见。本发明所提出的半实化虚核单片机,在预先检查时可以保留整段的安全指令,在实际的主处理器上直接执行,特别适合应用IO映射。IO映射,既可以保持IO的地址不变,也可以进行地址替换(比如将0x8010地址的主处理器IO寄存器替换为虚核单片机的0x10000)。进行地址替换,可以实现不同的主处理器硬件系统,支持相同的虚核单片机,从而保持可移植性。
进一步的,单片机生产研发工具,都有配套的计算机程序(上位机软件),用来做一些单片机芯片的配置自定义功能的选择、二进制代码的处理转换、产生工程文件等工作,并且一般通过USB等通讯接口与单片机生产研发工具通讯,上传和下载数据。也可以提供虚核单片机给用户,作为上位机软件自定义开发的接口,使第三方合作软件开发者或用户无需学习掌握计算机软件开发语言,利用熟悉单片机的开发环境即可完成上位机软件的定制开发。举例来说,比如一个单片机配置选项的配置窗口,有一些输入框、复选框等图形控件,在虚核单片机里提供对应的子程序,调用后即在配置串口的指定位置,放置对应的控件,调用虚核单片机的对应子程序可以取得控件的结果,再根据芯片的相关特性,做相应的自定义处理;用户也可以利用虚核单片机调用文件处理相关的子程序,实现自定义的文件转换等处理。在上位机软件中采用虚核单片机,逻辑隔离特性是次要的、甚或无关紧要,主要是利用指令集兼容特性而带来的开发环境转换的便利。
相应地,如图2所示,本发明还提供了上述单片机生产研发工具的实现方法:
步骤201、在主处理器中定义一虚核单片机,从本主处理器的存储资源中为该虚核单片机分配虚核单片机程序存储器和虚核单片机数据存储器的存储空间,一般会进行显式初始化或清除,避免信息泄露;所述虚核单片机提供有预先定义的指令集。
步骤202、由用户自定义开发虚核单片机代码,从外部存储器或计算机将其装入虚拟单片机的虚核单片机程序存储器中。步骤201和步骤202的次序不重要,可根据需要颠倒。
步骤203、从虚核单片机程序存储器中读取并执行用户编写、编译的虚核单片机二进制代码,通过系统调用接口调用内部资源,完成目标单片机的生产和研发。本步骤中,虚拟单片机可能一直执行,也可能执行完一次工作后结束。根据虚拟单片机的代码而定。
采用本发明所揭示的方法,使单片机生产研发工具的厂家可以在保证技术秘密的前提下,提供软件资源,给第三方开发者或用户自行开发单片机芯片相关的软件,从而降低工具的软件成本,增加工具所支持的芯片种类,并且不需要采用有硬件特权级、MMU内存保护的处理器。第三方开发者或用户自行开发的软件,也可以在多家工具厂家的产品上安装运行(当然前提是各家的产品都支持统一的虚核单片机接口和用户程序库接口)。由于老牌的工具厂家大多在西方发达国家,本发明的技术获得实际应用,有望实现单片机生产研发工具的市场大洗牌,大幅降低工具售价。将令我国在单片机生产研发工具领域,超越西方发达国家,间接的帮助我国的单片机芯片产业的发展。而单片机芯片产业,在半导体行业占用重要地位。
本发明还揭示了一种适合提供给用户作为自定义开发接口的虚核单片机实现方法-半实化虚拟处理器,基本思想是,摈弃传统虚拟处理器的指令集兼容特性,只保留逻辑隔离特性,在主处理器中,定义一个相同或相近内核架构的虚核单片机,在运行虚核单片机之前进行预先安全检查过程,将部分指令视为安全指令,原样保留在主处理器上直接运行,而对主处理器的安全性有潜在影响可能的指令,进行指令替换,替换为指令模拟程序的入口调用指令,由指令模拟程序在运行时进行安全检查并模拟实现其指令功能,该方法不依赖主处理器硬件上的内存保护机制。
为了能令部分指令可以认为是安全指令,在实现逻辑隔离、保证主处理器系统安全性的前提下,划分出一部分主处理器的存储资源,给虚核单片机直接共用,称为共用存储资源。共用存储资源一般为内核寄存器的一部分。对于某些内核架构如AVR内核,由于指令集的特性,也可以包括SRAM存储器的一部分。只影响共用存储资源的指令,就可以被认为是安全指令。
传统的虚拟处理器被定义为只能访问分配给它的存储资源,所以能实现逻辑隔离,保证主处理器系统的安全性。但实际上,即使虚拟处理器访问了不是分配给它的存储资源,只要未获取到数据信息,也不会破坏逻辑隔离,从而影响主处理器系统的安全性。我们可以更精确的替换成两个更具体的规则:虚拟处理器无法获取主处理器系统使用到的数据信息,虚拟处理器无法修改主处理器系统使用到的数据信息。允许虚拟处理器使用共用存储资源,看起来似乎违反了这2个规则。我们可以采取下面的方法,来满足这2个规则:虚拟处理器有启动、挂起、继续、终止等状态转换;在启动时,可以对共用存储资源进行显式的初始化(比如清零),避免虚拟处理器从中获取主处理器系统的数据信息;挂起时,对共用存储资源进行保存;继续时,恢复共用存储资源的保存值;终止时,最好也对共用存储资源进行显式的清除(销毁,比如清零),避免虚拟处理器的数据信息残留,在意外的情况下,影响主处理器后续的运行。如此一来,就保证了虚拟处理器访问共用存储资源,仍然遵守了所述的2个规则,实现逻辑隔离,保证了主处理器系统的安全性。
除启动外,虚拟处理器的挂起、继续、终止等状态,都不是必须的。
虚拟处理器的挂起和继续,是指暂停虚拟处理器的模拟运行,去执行主处理器系统的其他任务,之后再返回继续虚拟处理器的模拟运行。执行指令模拟程序时也需要保存指令模拟程序使用到的存储资源,返回时恢复保存值,但仍然属于虚拟处理器的运行,同虚拟处理器的挂起和继续不同。
实践中,分配给虚拟处理器专用的存储资源,在启动时,也最好做显式的初始化;在终止时,也最好做显式的清除(销毁)。这一点对所有形式的虚拟处理器,都是推荐的做法。
判断指令是否影响主处理器系统的安全性,可以把指令对存储资源的影响范围为依据,如果指令只影响到分配给虚拟处理器的专用存储资源和共用存储资源,则视为安全的,该影响包括直接访问和间接影响。
在运行虚拟处理器之前,对虚拟处理器的代码逐条进行预先安全检查,首先区分指令和常数数据,并加以标记。如果预先安全检查能判断该指令进行的操作不影响主处理器系统的安全性,则视为安全指令,原样保留,直接在主处理器上运行;如果无法预先判断该指令是否影响主处理器系统的安全性,则替换成指令模拟程序的入口指令,由指令模拟程序在运行时虚拟实现该指令的功能;如果预先判断该指令必定影响主处理器系统的安全性,则视为非法指令,一般应该拒绝运行虚拟处理器的代码,也可以替换成NOP指令或其他安全的指令,或替换成指令模拟程序的入口指令,由指令模拟程序进行记录、等效操作等相应处理;对于无法区分是指令还是常数数据的机器码,可以替换成替换指令,并做出标记,运行时采取模拟运行的方式。
哪些存储资源划分为共用存储资源,首先要保证主处理器系统安全性(这就需要尽量少划分),其次要提高虚拟处理器的运行速度(这就要求尽量多的划分)。也可以先对虚拟处理器的指令进行扫描,统计出内核寄存器的使用率,作为划分的依据。
替换指令需要满足2个条件,首先必须是指令集最短长度的指令,比如ARM和AVR处理器中最短的都是16bit的指令,就必须选择一条16bit的指令来作为替换指令;其次,替换指令跳转后,必须保存被替换指令的地址信息,子程序调用指令或软中断都能满足这一条。被替换的指令的编码内容,应该被另外保存在一个数据表中,指令模拟程序利用替换指令跳转时保存的地址信息,获取该指令的编码内容。
对于堆栈和堆栈寄存器,与主处理器共用时会影响主处理器系统的安全性,一般应该由指令模拟程序来模拟。
保留指令的总长度占总机器码长度的比率,称为保留比率。保留比率越高,执行效率越高,半实化虚核单片机的效果越好。
进一步的,预先检查指令是否安全,除逐条检查外,也可以基于一段不可分割的指令段来进行,以提高保留比率,比如ARM处理器的一段指令LDR.N R0,=SramDataForVM;LDRR0,[R0];作用是把SramDataForVM处的数据装入R0。单就LDR R0,[R0]这条指令来说,具有访问整个存储空间的能力(R0可为任意数值),是需要替换成指令模拟程序入口指令,进行模拟执行的。但联系前面的一条指令做整体分析,可以预先判断这条指令存取的范围,必然会落在分配给虚拟处理器的存储资源内(因为之前的指令将R0数值置为SramDataForVM),于是可以整段原样保留。所述不可分割,指作为一个整体原样保留,必须整体执行;如果运行时有跳转到这段指令中间范围执行的情况(如前例从其他地址直接跳转到LDR R0,[R0]指令),必须拒绝执行,或者通过指令模拟程序逐条模拟执行,直到整段指令结束。这一点可以通过对程序分支指令的审查和模拟运行来保证。
进一步的,预先检查过程和指令替换工作,特别是基于不可分割的指令段的检查,需要进行反汇编分析,我们可以在主处理器系统中进行所有的检查和指令替换,也可以事先在其他性能强大的计算机系统中进行预先分析和处理,并把处理结果作为参考信息,和虚拟处理器代码一起导入主处理器系统。主处理器系统的预先检查单元再根据参考信息,进行检查和指令替换。基于指令段的检查,允许虚拟处理器代码以实际处理器的速度,存取SRAM存储资源和IO存储资源,实现SRAM内存映射和IO映射。
对于程序分支指令,实际上是对程序计数器PC的访问,在预先安全检查时可以判断跳转目的地址为允许的地址,则视为安全指令,予以原样保留;否则由指令模拟程序在运行时模拟实现。指令模拟程序保证跳转目的在允许的地址范围内,且不会跳转到常数的存储地址上,不会跳转到长指令的中间位置(比如ARM的32位指令的第二个半字),不会跳转到预先检查无法事先确认是否安全的指令;也可以定义一段不可分割的指令段(用于基于指令段的安全检查),对于跳转到不可分割的指令段中间的情况做针对性处理。当发生程序分支异常时,可以拒绝继续运行虚拟处理器;也可以进入逐条指令进行安全检查、模拟运行的“安全模式”。一般来说,预先检查过程会产生一个分支控制表,以便于指令模拟程序判断目的地址的安全性。举例来说,分支控制表可以把整个地址空间分段,每段有常数段、安全指令段、不可分割指令段、未知段等属性类型;指令模拟程序对于目的地址,利用二分查找法,定位到段,并取得段的类型;段为常数,则不允许跳转执行;段为安全指令,则允许跳转执行;目的地址为为不可分割指令段的中间地址,则应该采用指令模拟程序逐条模拟执行,直到整段指令结束;目的地址为未知段,表示预先检查过程无法确认该处是指令还是常数,应该逐条模拟执行。
指令模拟程序的要求,是利用替换指令跳转时保存的地址信息,动态检查被替换指令的访问范围,在没超出许可范围时,视为安全,完成被替换指令的功能。指令模拟程序的具体实现属于一般编程技术,本发明不做进一步描述。指令模拟程序也可以结合预先转换代码的虚拟处理器的特性,获取预先转换、分析好的执行码,或者跳转到预先转换好的一段主处理器的指令序列去执行,都是属于现有技术的范围。
指令模拟程序,除模拟非安全的指令外,对于安全指令,也可以模拟执行,以便模拟执行不可分割的指令段,和模拟执行未知段。进一步的说,如果指令模拟程序执行到未知段,并在模拟执行时确认是安全指令,可以把信息存储起来,反馈给预先检查过程,以便下一次执行预先检查过程时,优化保留比率。
进行共用存储资源的划分时,将主处理器和虚拟处理器的内核寄存器进行分类:CoreREG1、CoreREG2、CoreREG3。其中CoreREG1是主处理器和虚拟处理器共用的,可以被虚拟处理器代码任意访问,而不影响主处理器软件系统的安全性,换句话说,虚拟处理器的CoreREG1直接使用主处理器的CoreREG1;主处理器的CoreREG2不允许虚拟处理器访问,虚拟处理器访问CoreREG2的指令由主处理器的指令模拟程序处理,换句话说,虚拟处理器的CoreREG2是主处理器的指令模拟程序虚拟的;主处理器的CoreREG3不允许虚拟处理器访问,而预先规定虚拟处理器也不存在CoreREG3,换句话说,虚拟处理器的代码中,不允许有指令访问CoreREG3。CoreREG3群不是必须的,CoreREG3可以归类到CoreREG2,此时CoreREG3也由主处理器的指令模拟程序虚拟来实现。
半实化虚拟处理器(Semi-real virtual machine),大部分指令都在主处理器上直接运行,运行速度是虚拟处理器中最快的。
进一步的,虚拟处理器和主处理器,也可以是相近指令集、相近内核结构的处理器。只要主处理器和虚拟处理器有部分指令相同,可直接运行,并且有部分内核寄存器相同,可供共用即可。虚拟处理器可以有主处理器没有的指令或寄存器,这部分指令和寄存器由指令模拟程序虚拟,比如在Cortex-M0处理器上虚拟一个Cortex-M3处理器。而主处理器拥有比虚拟处理器更多的指令和寄存器,比如在Cortex-M3处理器上虚拟一个Cortex-M0处理器,更是理所当然。
主流的ARM C编译器,都有Read-Only Position Independent和Read-WritePosition Independent编译选项。
进一步的,我们规定虚拟处理器的机器码,符合Read-Only PositionIndependent。这样,虚拟处理器机器码可以装载到主处理器的任意地址,以便同时运行多个虚拟处理器。
进一步的,我们规定虚拟处理器的机器码,符合Read-Write PositionIndependent。这样,我们分配给虚拟处理器的存储资源,可以动态改变,以便同时运行多个同样的虚拟处理器。
进一步的,虽然我们用虚拟处理器的目的是实现“逻辑隔离”,但我们也必须规定一个系统调用接口,使虚拟处理器的代码可以调用主处理器的内部资源,以进行输出输入操作和运算功能等。否则就如同一个没有引出输入输出管脚的处理器芯片,或者是一间完全密闭没有门的房子,失去实际应用的意义。与传统的虚拟处理器不同,本发明的半实化虚拟处理器可以用调用子程序的形式,直接调用主处理器的内部资源中的子程序,而不需要进行特殊指令的约定。,且子程序在高级语言的表现形式,比如C语言的函数,其参数可以采用统一的约定。对于ARM处理器,一般采用AAPCS调用规范。也可以使用软中断方式来调用主处理器的内部资源。不管哪种方式的系统调用接口,主处理器的内部资源,必须对虚拟处理器传递过来的参数数据做严格检查,避免漏洞被利用来攻击主处理器系统,或获取主处理器系统的数据信息,威胁主处理器系统的安全性;也要对返回给虚拟处理器的数据做严格处理,避免主处理器系统数据信息的泄露。
进一步的,也可以规定一个系统映射接口,允许虚拟处理器直接访问IO资源,结合半实化虚拟处理器的直接执行优势,可以实现虚拟处理器同主处理器一样的IO访问速度,而避免通过系统调用接口进行输入输出操作,存在调用过程的开销。
归纳起来,定义并实现一个本发明所述的半实化虚拟处理器,可以按如下步骤,首先要划分共用资源,确定替换指令,然后就可以定义预先安全检查和指令替换的规则,并编写指令模拟程序和预先安全检查过程的代码。
下面我们来举例说明在32位的ARM处理器中,虚拟一个Cortex-M0半实化虚拟处理器的方法。
在主处理器为ARM芯片时,为减少编程工作量,最好选择最简单的ARM处理器作为虚拟处理器,目前来说,Cortex-M0处理器是ARM处理器中最简单的一个成员。
首先,我们观察ARM处理器的内核寄存器:
1、CPU核心寄存器,如图7和图8所示。
我们可以按照本发明的思想,把ARM内核架构的核心寄存器分为3个群,CoreREG1:允许虚拟处理器自由使用的R0~R12和PSR中的APSR(N Z C V四个标志位);CoreREG 2:需要进行虚拟的R13(SP)、R15(PC),R14(LR)一般划分到CoreREG2,但也可以划分到CoreREG1;CoreREG 3:不允许虚拟处理器使用的PRIMASK CONTROL PSR中的IPSR EPSR。,
在对虚拟处理器的指令逐条进行预先安全检查和替换时,如果虚拟处理器中的机器码只访问CoreREG1,则保持不变;如果虚拟处理器中的指令访问CoreREG2时,替换成指令模拟程序的入口指令,通过指令模拟程序来完成该指令的功能,并进行运行时的动态检查;如果虚拟处理器中的指令访问CoreREG3,则视为非法指令。
接下来,我们观察虚拟的ARM处理器的机器码。其中包括指令和常数。Cortex-M0内核指令集有56条指令。我们对虚拟处理器的机器码逐条进行检查。ARM处理器指令集中的常数,一般是指文字池Literal Pool,由LDR<Rt>,<label>指令读取。
首先,我们做出规定,虚拟的ARM处理器的机器码,指令和常数必须能在运行前就定位、区分,比如被分开在不同的地址区域,或进行递归下降的反汇编分析。
对于常数,我们进行标记后,存储为信息表供指令模拟程序使用,以便指令模拟程序不允许虚拟处理器代码跳转到常数对应的地址。
对于指令,我们进行预先安全检查和替换。一类指令仅操作CoreREG1,可以肯定是安全的,保留原状;一类指令操作CoreREG2,需要在运行时才能判断是否访问虚拟处理器的资源,称为受控指令,则被替换成替换指令;其他指令,包括访问了CoreREG3的指令,和未定义的指令,被认为是非法的,称为非法指令,检测到此类指令,则不进行虚拟处理器的运行,或替换成NOP操作。
对于虚拟处理器的堆栈,涉及到SP寄存器,首先应该在虚拟处理器的SRAM资源中分配。SP寄存器,我们用主处理器的SRAM存储资源虚拟,以与主处理器的堆栈隔离,保证安全性。
虚拟处理器的程序分支指令,涉及到PC寄存器和LR寄存器,在进行预先安全检查时,如果能判断是跳转到虚拟处理器的指令区域,则原样保留,否则替换为指令模拟程序,在运行时,进行判断、控制,保证安全性。由于通常频繁的程序跳转,都是相对地址的短距离跳转,其跳转目的地址可以预先判断,因此可以保证执行速度。
下面对ARMv6M的指令集进行分类,未列入安全指令和受控指令的指令编码,均视为非法指令,其中T1T2表示相同的汇编指令,具有多种指令编码形式,参见ARMv6M的手册。
1、绝对安全的指令,这类指令只访问R0~R7:MOVS<Rd>,<Rm>T2;LSLS<Rd>,<Rm>,#<imm5>;LSRS<Rd>,<Rm>,#<imm5>;ASRS<Rd>,<Rm>,#<imm5>;ADDS<Rd>,<Rn>,<Rm>T1;SUBS<Rd>,<Rn>,<Rm>;ADDS<Rd>,<Rn>,#<imm3>;SUBS<Rd>,<Rn>,#<imm3>;MOVS<Rd>,#<imm8>;CMP<Rn>,#<imm8>;ADDS<Rdn>,#<imm8>;SUBS<Rdn>,#<imm8>;ANDS<Rdn>,<Rm>;EORS<Rdn>,<Rm>;LSLS<Rdn>,<Rm>;LSRS<Rdn>,<Rm>;ASRS<Rdn>,<Rm>;ADCS<Rdn>,<Rm>;SBCS<Rdn>,<Rm>;RORS<Rdn>,<Rm>;TST<Rn>,<Rm>;RSBS<Rd>,<Rn>,#0;CMP<Rn>,<Rm>T1;CMN<Rn>,<Rm>;ORRS<Rdn>,<Rm>;MULS<Rdm>,<Rn>,<Rdm>;BICS<Rdn>,<Rm>;MVNS<Rd>,<Rm>;SXTH<Rd>,<Rm>;SXTB<Rd>,<Rm>;UXTH<Rd>,<Rm>;UXTB<Rd>,<Rm>;REV<Rd>,<Rm>;REV16<Rd>,<Rm>;REVSH<Rd>,<Rm>;NOP;
2、可以预先检查操作数而判断是否安全的指令,这类指令,需要根据操作数来判断是否需要受控:B<c><label>T1;LDR<Rt>,<label>;B<label>T2;BL.W<label>T1;MOV<Rd>,<Rm>T1;ADD<Rdn>,<Rm>T2;CMP<Rn>,<Rm>T2;MOV<Rd>,<Rm>T1;ADR<Rd>,<label>;
3、必须受控的指令,这类指令无法预先判断是否安全,必须由指令模拟程序再运行时判断:BX<Rm>;BLX<Rm>;STR<Rt>,[<Rn>,<Rm>];STRH<Rt>,[<Rn>,<Rm>];STRB<Rt>,[<Rn>,<Rm>];LDRSB<Rt>,[<Rn>,<Rm>];LDR<Rt>,[<Rn>,<Rm>];LDRH<Rt>,[<Rn>,<Rm>];LDRB<Rt>,[<Rn>,<Rm>];LDRSH<Rt>,[<Rn>,<Rm>];STR<Rt>,[<Rn>{,#<imm5>}];LDR<Rt>,[<Rn>{,#<imm5>}];STRB<Rt>,[<Rn>,#<imm5>];LDRB<Rt>,[<Rn>{,#<imm5>}];STRH<Rt>,[<Rn>{,#<imm5>}];LDRH<Rt>,[<Rn>{,#<imm5>}];STR<Rt>,[SP,#<imm8>];LDR<Rt>,[SP{,#<imm8>}];ADD<Rd>,SP,#<imm8>;ADD SP,SP,#<imm7>;SUB SP,SP,#<imm7>;PUSH<registers>;POP<registers>;STM<Rn>!,<registers>;LDM<Rn>,<registers>;MSR.W<spec_reg>,<Rn>;MRS.W<Rd>,<spec_reg>;UDF.W#<imm16>;
4、明确的非法指令,这些指令也可进一步根据需要做分别处理,是视为非法,禁止运行,还是替换为NOP,或其他排除危险性的方式,比如仅仅记录该非法指令的执行记录,并不做实际操作:CPSIE i;CPSID i;BKPT#<imm8>;UDF#<imm8>;SVC#<imm8>;DSB.W#<option>;DMB.W#<option>;ISB.W#<option>;
ARM半实化虚拟处理器替换指令的具体选择,可以多种多样。
比如使用SVC软中断的方式,将16bit的受控指令替换成SVC指令,32bit的受控指令替换成SVC指令和NOP指令,以保持地址不变。在SVC中断服务程序中放置指令模拟程序,根据中断发生的地址(即返回地址),可以判断是需要替换哪条指令,从而进行相应的处理。需要注意的是,这种方法需要保证SVC软中断中断返回地址就是被替换指令位置,需要仔细阅读ARM处理器的中断系统章节,确保芯片支持这点特性。而且为了不增加中断系统的延迟,应该把SVC中断优先级设为最低。
或者,我们可以利用CoreREG2群中的LR(R14)寄存器,LR中存放指令模拟程序的入口,替换指令就是BLX<LR>,指令模拟程序可以从LR寄存器中获取被替换指令的地址,从而判断是需要替换哪条指令,从而进行相应的处理。
或者,我们可以扫描虚拟处理器的代码,把某个较少用到的通用寄存器如R12划分为CoreREG2群而不是CoreREG1群,保留给替换指令使用。R12存放指令模拟程序的入口,替换指令就是BLX<R12>,指令模拟程序可以从LR寄存器中获取被替换指令的地址,从而判断是需要替换哪条指令,从而进行相应的处理。
我们来简单举例说明在8位的AVR处理器中,虚拟一个半实化虚拟处理器的方法。
对于AVR,指令有16bit、32bit、48bit、64bit等长度,指令模拟程序的入口指令可以用RCALL指令或ICALL指令,这2条指令都是16bit的指令。
AVR的32个通用工作寄存器R0~R29,和SREG中除I的其他位,和IO空间中的GPIOR0~2都可以划分到CoreREG1,作为共用存储资源。其他寄存器、IO空间、SRAM均划分到CoreREG2。R30:R31可视指令模拟程序的入口指令形式来划分。R0~R29的通用寄存器数量很多,如果指令模拟程序需要,可以拿出一部分来划分到CoreREG2。
AVR的大部分指令都可以访问R0~R31,因此都需要根据操作数来判断是否为安全指令。
本发明揭示的半实化虚拟处理器技术,不考虑指令集兼容特性,而专注逻辑隔离特性,特别适合应用于单片机生产研发工具的虚核单片机中。
以下将列举三个实例,对本发明进一步详细说明。
实例一,在单片机产品生产用的烧录器中,用户经常有一些特殊需求,比如为了防止代码被非法拷贝到其他芯片中使用,读取单片机的某个个体芯片的特征值后,按用户自定的算法,计算出一个校验值,烧录时写入某个特殊地址,单片机软件运行时,核对校验值,。此应用中,用户希望算法只有自己知道。我们可以定义一个虚核单片机,在烧录前读取单片机的某个个体芯片的特征值后,放置在虚核单片机的某个特定地址,运行用户自行编写的虚核单片机代码,计算后的校验值和地址值,放置在某个特定地址。烧录器再将该数值同单片机二进制代码一起烧录进芯片。
实例二,是软件由多方合作开发的单片机产品,比如一个通用单片机烧录器(或称编程器),主处理器系统由烧录器厂家开发,包含了硬件相关的子程序和系统管理程序,并定义了半实化虚核单片机作为用户自定义开发接口,和相应的描述文件,供用户进一步开发。芯片烧录算法相关的代码,在虚核单片机上运行,由单片机芯片厂家开发,单片机芯片厂家无需公开芯片烧录算法。最终用户也可以如上一个实施例一般,开发用户自定义的代码。并且单片机烧录器的烧录接口对应的IO管脚的内存地址,映射到虚拟处理器的相同地址,允许单片机芯片厂家开发的芯片烧录代码直接访问、操作,且操作速度同主处理器系统的代码操作速度是一样的,这一点,是传统的虚核单片机做不到的。对于通用单片机烧录器,支持各个厂家的单片机芯片,软件的工作量很大,如果全部由烧录器厂家开发,需要投入很大的人力物力,导致产品成本提高。利用本发明,软件可以多方合作,烧录器厂家提供硬件和系统软件,第三方开发特定单片机对应的支持软件,从而以最低成本,实现支持更多的单片机芯片。
实例三,是一种单片机仿真调试器,我们假设称为China-Link。对比现有市场上典型的商品化仿真调试器J-link(德国Segger公司的产品),该China-Link调试器具有类似的硬件架构,具有USB计算机接口目标单片机接口(标准的20P JTAG)接口。但是软件架构采用半实化虚核单片机作为用户自定义开发接口,厂家提供半实化虚核单片机的开发文档,公开描述虚核单片机的指令集、程序存储器空间、数据存储器空间,并且描述用户程序库的系统调用接口。用户程序库包含USB通讯子程序,与安装在个人计算机系统上的开发调试环境(IDE)通讯;包含目标单片机接口的常用协议子程序(如SWD协议、JTAG协议、串口协议、SWIM协议、BDM协议等)。并且定义了IO映射。China-Link的最终用户或第三方用户,利用虚核单片机的开发文档,开发出不同的虚核单片机的代码,可以支持不同的单片机芯片的仿真、调试。而现有的J-link调试器,必须由厂家开发出相应芯片的支持软件,并升级J-Link调试器后,才能支持新出现的芯片,一些国产单片机芯片,由于种种原因,得不到升级支持,影响芯片的市场推广。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于虚核单片机的单片机生产研发工具,包括主处理器,以及分别与所述主处理器连接的计算机接口、单片机调试下载接口,其通过单片机调试下载接口连接到目标单片机、通过计算机接口连接到计算机;
所述主处理器中具体包括有用户程序库、数据存储器、程序存储器、虚核单片机、虚核单片机程序装载单元;
所述虚核单片机具体包括虚拟运行单元;所述虚拟运行单元,用于从虚核单片机程序存储器中读取执行码,通过系统调用接口调用所述用户程序库,完成所述目标单片机的生产或研发工作;其特征在于,
所述虚核单片机作为自定义开发应用软件接口,提供有预先定义的指令集,以此指令集为依据运行二进制代码,实现多方软件合作开发;所述虚核单片机程序装载单元,用于从外部存储器或计算机装入虚核单片机的机器码或机器码转换过后的执行码至虚核单片机程序存储器;
所述虚核单片机还包括虚核单片机数据存储器和虚核单片机程序存储器;
所述虚核单片机程序存储器和虚核单片机数据存储器,其存储资源从所述数据存储器和程序存储器中划分而来,分别用于存储虚核单片机的执行码和运算数据。
2.如权利要求1所述的单片机生产研发工具,其特征在于,所述单片机生产研发工具具体为:单片机编程器、单片机升级下载器、单片机仿真器或单片机调试器。
3.如权利要求1所述的单片机生产研发工具,其特征在于,所述虚核单片机的指令集为8051、PIC、AVR、ARM、STM8或6502指令集,以供不同用户选择使用。
4.如权利要求1所述的单片机生产研发工具,其特征在于,所述虚拟运行单元,用于以逐条读取虚核单片机代码、逐条解释执行的方式执行虚核单片机代码;
或者以预先把虚核单片机代码转换成执行码,再逐条读取执行码、逐条解释执行的方式执行虚核单片机代码;
或者预先把虚核单片机代码转换成符合主处理器系统的指令集的执行码,直接运行。
5.如权利要求1所述的单片机生产研发工具,其特征在于,所述虚拟运行单元,用于由预先检查过程,将虚核单片机代码的部分指令替换成指令模拟程序的入口指令,再直接运行替换过的半实化代码;在所述预先检查过程中,采用逐条检查方式。
6.如权利要求1所述的单片机生产研发工具,其特征在于,所述虚拟运行单元,还用于在所述预先检查过程中,基于指令段来进行检查以提高保留比率。
7.如权利要求1所述的单片机生产研发工具,其特征在于,所述单片机生产研发工具还包括外部存储器芯片、显示屏、喇叭、指示灯和/或供电模块。
8.一种如权利要求1至7任一所述单片机生产研发工具的实现方法,其特征在于,该方法包括步骤:
在主处理器中定义一虚核单片机,从本主处理器的存储资源中为该虚核单片机分配虚核单片机程序存储器和虚核单片机数据存储器的存储空间;所述虚核单片机提供有预先定义的指令集;
由用户自定义开发虚核单片机代码,从外部存储器或计算机将其装入虚核单片机中;
从虚核单片机程序存储器中读取并执行用户编写、编译的虚核单片机二进制代码,通过系统调用接口调用内部资源,完成目标单片机的生产和研发。
9.如权利要求8所述单片机生产研发工具的实现方法,其特征在于,该方法中,所述执行虚核单片机代码的方法具体为:
以逐条读取虚核单片机代码、逐条解释执行的方式执行虚核单片机代码;
或者,以预先把虚核单片机代码转换成执行码,再逐条读取执行码、逐条解释执行的方式执行虚核单片机代码;
或者,预先把虚核单片机代码转换成符合主处理器系统的指令集的执行码,直接运行;
或者,由预先检查过程,将虚核单片机代码的部分指令替换成指令模拟程序的入口指令,再直接运行替换过的半实化代码;在所述预先检查过程中,采用逐条检查方式。
10.如权利要求8所述单片机生产研发工具的实现方法,其特征在于,该方法还包括:在所述预先检查过程中,基于指令段来进行检查以提高保留比率。
CN201510498135.XA 2015-08-13 2015-08-13 基于虚核单片机的单片机生产研发工具及其实现方法 Active CN105204393B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510498135.XA CN105204393B (zh) 2015-08-13 2015-08-13 基于虚核单片机的单片机生产研发工具及其实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510498135.XA CN105204393B (zh) 2015-08-13 2015-08-13 基于虚核单片机的单片机生产研发工具及其实现方法

Publications (2)

Publication Number Publication Date
CN105204393A CN105204393A (zh) 2015-12-30
CN105204393B true CN105204393B (zh) 2017-12-26

Family

ID=54952138

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510498135.XA Active CN105204393B (zh) 2015-08-13 2015-08-13 基于虚核单片机的单片机生产研发工具及其实现方法

Country Status (1)

Country Link
CN (1) CN105204393B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105679366B (zh) * 2015-12-31 2020-01-21 北京兆易创新科技股份有限公司 一种便携式多功能离线烧录器
CN106126314B (zh) * 2016-06-15 2019-11-05 龙芯中科技术有限公司 扩充指令的模拟方法和装置
CN106843035B (zh) * 2016-12-28 2019-11-08 歌尔科技有限公司 一种智能设备开发调试过程中控制智能设备的方法和系统
CN106775955A (zh) * 2017-01-12 2017-05-31 合肥杰美电子科技有限公司 一种虚拟指令调用系统服务的方法及系统
CN111625485A (zh) * 2019-02-28 2020-09-04 上汽通用汽车有限公司 用于设计程序下载器的方法和程序下载器系统
CN110262349A (zh) * 2019-06-28 2019-09-20 中国航空工业集团公司雷华电子技术研究所 一种c8051f系列单片机的远程在线编程方法及系统
CN111147545A (zh) * 2019-11-29 2020-05-12 沈阳航空航天大学 一种基于NB-IoT的智能防窃电系统
CN111522588B (zh) * 2020-04-16 2023-05-05 珠海泰芯半导体有限公司 一种基于swd协议的芯片运行交互方法及通信系统
CN112287422A (zh) * 2020-09-25 2021-01-29 浪潮金融信息技术有限公司 一种基于J-Link的批量修改Creo模型参数的方法及装置
CN113703925B (zh) * 2021-10-27 2022-01-25 长沙理工大学 一种web3D多虚拟单片机系统的协同作业方法及系统

Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5047922A (en) * 1988-02-01 1991-09-10 Intel Corporation Virtual I/O
CN1325511A (zh) * 1998-10-30 2001-12-05 艾利森电话股份有限公司 处理设备
US6367063B1 (en) * 1998-02-05 2002-04-02 Hughes Electronics Corporation Method and apparatus for selectively performing a plurality of logic operations and memory functions
JP2003036169A (ja) * 2001-07-25 2003-02-07 Nec Software Tohoku Ltd 複数の小規模プロセッサによって並列処理を行なうシングルチップマイクロプロセッサ
US7012378B1 (en) * 2004-02-06 2006-03-14 Next Sierra Programmable current source and methods of use
CN101042815A (zh) * 2007-01-19 2007-09-26 华南理工大学 基于在线可编程逻辑器件的单片机教学实验装置
CN201174113Y (zh) * 2008-04-09 2008-12-31 黄伟 可以独立地执行单片机程序调试仿真的设备
CN101436144A (zh) * 2007-11-14 2009-05-20 黄伟 单片机程序编辑和仿真主机
CN201352343Y (zh) * 2008-08-14 2009-11-25 彭增金 可运行用户程序的多功能微处理器开发编程工具
CN102043715A (zh) * 2010-12-24 2011-05-04 上海电机学院 一种现场用户实现单片机仿真的方法及装置
CN102508752A (zh) * 2011-11-21 2012-06-20 广州市风标电子技术有限公司 一种单片机硬件仿真器和仿真方法
CN102750214A (zh) * 2011-04-19 2012-10-24 成都联星微电子有限公司 一种通过设备应用接口进行测试及编程的方法
CN102945174A (zh) * 2012-11-08 2013-02-27 大连捷成实业发展有限公司 通过接着片外Flash实现单片机程序升级的方法
CN103984243A (zh) * 2014-05-19 2014-08-13 中国重汽集团济南动力有限公司 一种单片机程序下载、调试、仿真系统
CN104077204A (zh) * 2014-07-22 2014-10-01 无锡中微爱芯电子有限公司 可重构的8位rsic单片机仿真器

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090254886A1 (en) * 2008-04-03 2009-10-08 Elliot Gibson D Virtual debug port in single-chip computer system

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5047922A (en) * 1988-02-01 1991-09-10 Intel Corporation Virtual I/O
US6367063B1 (en) * 1998-02-05 2002-04-02 Hughes Electronics Corporation Method and apparatus for selectively performing a plurality of logic operations and memory functions
CN1325511A (zh) * 1998-10-30 2001-12-05 艾利森电话股份有限公司 处理设备
JP2003036169A (ja) * 2001-07-25 2003-02-07 Nec Software Tohoku Ltd 複数の小規模プロセッサによって並列処理を行なうシングルチップマイクロプロセッサ
US7012378B1 (en) * 2004-02-06 2006-03-14 Next Sierra Programmable current source and methods of use
CN101042815A (zh) * 2007-01-19 2007-09-26 华南理工大学 基于在线可编程逻辑器件的单片机教学实验装置
CN101436144A (zh) * 2007-11-14 2009-05-20 黄伟 单片机程序编辑和仿真主机
CN201174113Y (zh) * 2008-04-09 2008-12-31 黄伟 可以独立地执行单片机程序调试仿真的设备
CN201352343Y (zh) * 2008-08-14 2009-11-25 彭增金 可运行用户程序的多功能微处理器开发编程工具
CN102043715A (zh) * 2010-12-24 2011-05-04 上海电机学院 一种现场用户实现单片机仿真的方法及装置
CN102750214A (zh) * 2011-04-19 2012-10-24 成都联星微电子有限公司 一种通过设备应用接口进行测试及编程的方法
CN102508752A (zh) * 2011-11-21 2012-06-20 广州市风标电子技术有限公司 一种单片机硬件仿真器和仿真方法
CN102945174A (zh) * 2012-11-08 2013-02-27 大连捷成实业发展有限公司 通过接着片外Flash实现单片机程序升级的方法
CN103984243A (zh) * 2014-05-19 2014-08-13 中国重汽集团济南动力有限公司 一种单片机程序下载、调试、仿真系统
CN104077204A (zh) * 2014-07-22 2014-10-01 无锡中微爱芯电子有限公司 可重构的8位rsic单片机仿真器

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
基于Proteus 虚拟技术的单片机实验仿真系统设计;任玲芝,惠思,李岩岩;《巢湖学院学报》;20130525;第15卷(第3期);全文 *
高校计算机硬件课程群的虚拟实验室构建;李超建,陆 钊,龚榆桐;《玉林师范学院学报(自然科学)》;20140401;第35卷(第2期);全文 *

Also Published As

Publication number Publication date
CN105204393A (zh) 2015-12-30

Similar Documents

Publication Publication Date Title
CN105204393B (zh) 基于虚核单片机的单片机生产研发工具及其实现方法
CN101763265B (zh) 一种过程级软硬件协同设计自动化开发方法
CN107291480B (zh) 一种函数调用方法及装置
Kumar et al. Harbor: software-based memory protection for sensor nodes
CN100492387C (zh) 基于Keil C51的软件保护开发的方法和系统
CN101297280B (zh) 隔离扩展和设备驱动程序的配置
TW201937393A (zh) 用於安全初始化的策略編輯之系統和方法
CN109101237A (zh) 代码的加密编译方法及装置
CN110598405B (zh) 一种运行时访问控制方法及计算装置
CN101706737B (zh) 软硬件协同函数库的构造方法
CN109598107A (zh) 一种基于应用安装包文件的代码转换方法及装置
Lacamera Embedded Systems Architecture: Explore architectural concepts, pragmatic design patterns, and best practices to produce robust systems
KR20110013191A (ko) 실행형 컨텐츠의 분리 실행 방법, 분리 실행 기반 실행형 컨텐츠 구성 장치, 그리고 분리 실행 기반 실행형 컨텐츠를 기록한 기록 매체
Stilkerich et al. Tailor‐made JVMs for statically configured embedded systems
Mikkonen Programming mobile devices: an introduction for practitioners
CN110597496B (zh) 应用程序的字节码文件获取方法及装置
US7752030B2 (en) Virtualization as emulation support
Shetty et al. Crust: AC/C++ to Rust transpiler using a “nano-parser methodology” to avoid C/C++ safety issues in legacy code
CN106970825A (zh) 一种基于gdb可配置框架的arm7仿真目标机实现方法
CN101593257B (zh) 基于.Net虚拟机的软件保护系统和方法
JP2013020425A (ja) オープンソースソフトウェアを利用したハードウェア・ソフトウェア協調検証方法
Antebi et al. Cross-compiling android applications to windows phone 7
Macrakis Protecting source code with ANDF
US11989291B2 (en) System, method, and apparatus for software verification
CN103413069B (zh) 一种保护面向对象语言编写的软件的方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant