CN109388430B - 实现微处理器对外设硬件控制的方法 - Google Patents
实现微处理器对外设硬件控制的方法 Download PDFInfo
- Publication number
- CN109388430B CN109388430B CN201710652605.2A CN201710652605A CN109388430B CN 109388430 B CN109388430 B CN 109388430B CN 201710652605 A CN201710652605 A CN 201710652605A CN 109388430 B CN109388430 B CN 109388430B
- Authority
- CN
- China
- Prior art keywords
- programming language
- code
- type
- microprocessor
- application layer
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及到了实现微处理器对外设硬件控制的方法。利用第一类编程语言编写微处理器的启动代码和硬件初始化代码,提供基于第一类编程语言编写的控制外设硬件的接口代码模块和相应的启动代码入口模块,将基于第一类编程语言编写的代码编译为第一静态链接库,利用第二类编程语言编写调用接口代码模块的应用层代码,编译基于第二类编程语言编写的应用层代码,指定第一静态链接库为链接库,指定启动代码入口模块为应用层代码的启动代码入口函数,将应用层代码编译的二进制文件烧录到微处理器。结合第一类编程语言擅长控制硬件的能力和第二类编程语言可实现复杂逻辑的特征,提升整个***的开发效率和降低出错率。
Description
技术领域
本发明主要涉及到微处理器***领域,确切的说是涉及到基于混合语言开发而提供微处理器对所配置的周边外设硬件的控制实现方法。
背景技术
微处理器面对不同的开发软件和运行环境,尤其是在当前的语言级别上无法真正利用微处理器特别是多核运算带来的性能提升,在嵌入到微处理器的开发语言和运行环境方面需要着重考虑安全和并发的特性。嵌入式微处理器的体系结构可以采用冯诺依曼体系或哈佛体系结构,指令***可以选用精简指令***和复杂指令***。例如精简指令***计算机在通道中只包含最有用的指令,确保数据通道快速执行每一条指令,从而提高了执行效率并使中央处理器硬件结构设计变得更为简单。微处理器种类至少包含微控制器和数字信号处理器以及嵌入式微处理器等等,消费电子、智能家电、网络设备和医疗仪器、航天设备及工业控制等广泛使用了微处理器作为控制核心,微处理器在整个完整的***中往往和作为外设的其他硬件模块配合使用,起到核心的控制作用。
在电子行业,嵌入式***是执行专用功能并被内部计算机控制的设备或者***,交叉融入了现代科学的多学科,以计算机技术为基础,以通信技术为载体,以消费类产品为对象和以应用技术产品为核心,部分引入了传感器技术,甚至在物联网的大潮下还趋于关联到互联网技术的应用。嵌入式***的特点是:软件以固化态的形式出现,也称固件,顾名思义所谓固件就是一旦设计完成就很难更改。硬件的设计具有很强的针对性,正式可靠性高和成本低,且体积小且功耗少,使得嵌入式***具有良好的应用前景。实质上嵌入式***不仅和常规的台式机或笔记本等计算机上的应用***不同,单就不同的具体应用而开发的不同嵌入式***之间差别也很大。其功能单一,简单且在兼容性方面要求不高,但在体积和成本方面较为敏感。目的主要是用高度智能化的***来提高宿主设备的功能。嵌入式***位数可多可少,完全由能满足宿主设备的功能要求来决定。目前嵌入式***的应用已经十分广泛:移动终端、智能卡、汽车、电梯、厨房卫浴设备、电视、录像机等,以及工业机器人、医药设备、卫星和飞行***等都有嵌入式的应用。嵌入式***在硬件构架上以微处理器为中心,配置存储器和输入输出设备、通信模块等必要的外设;软件部分以软件开发平台为核心,向上提供应用编程接口,向下屏蔽具体硬件特性的板级的支持包。由软件和硬件紧密配合从而相互协调工作,共同完成***预定的功能。
微处理器对硬件模块的控制很大程度上依赖于现今的软件***开发,开发语言的简练容易执行和安全、精确的内存管理是关注的前沿和中心。在当前的技术限制下,安全的和确定的内存回收是困难的问题之一,虽然并不是唯一的问题,但是甚至在一个程序中最重要的问题。低级的开发语言容易兼容微处理器,灵活性强,具备极高的性能,因为往往低级的语言对于处理器本身而言最直接和容易执行,传统的嵌入式软件开发中通常使用汇编语言和C语言进行开发,这两种编程语言灵活强大,具备极高的性能,对开发者的技术素养要求较高,但是开发效率较低。正是因为汇编语言的复杂晦涩,目前C语言在嵌入式开发中占据了主流地位,使用C相比汇编语言是一大进步,但是C语言依旧有它的较大不足之处,在开发中极易发生难以克服的问题,例如它的类型检查不够严格,对于数组越界等情况没有内建的检查支持,极易导致***在运行中发生崩溃等异常现象,微处理器的广大应用领域尤其是精尖细行业是无法容忍这一点。在微处理器对所配置的周边外设硬件的控制的实现过程中,这些崩溃等异常现象体现在但不限制于:微处理器崩溃、程序异常关闭、读取错误和写入错误或发生其他问题。
现有技术的另一大缺陷是在使用多种语言时会存在语言之间的兼容特性差,因为不同风格和编程规则的代码集成在一起,对执行代码的处理器而言,在保证低的出错率的前提下是非常难以在不同规范之间的语言环境下顺畅切换,因为处理器并非是单方面自行运作的还须考虑到周边的硬件配合,这是本申请后文内容要解决的。
发明内容
在本发明的一个较佳的可选的实施方式中,披露了一种实现微处理器对外设硬件控制的方法,其中,该方法包括:
利用第一类编程语言编写由微处理器执行的启动代码和初始化代码;
提供基于第一类编程语言编写的访问外设硬件的接口代码模块和启动代码入口模块;
将基于第一类编程语言编写的代码编译成第一静态链接库;
利用第二类编程语言编写调用所述接口代码模块的应用层代码;
编译基于第二类编程语言编写的应用层代码,指定所述第一静态链接库为链接库,指定所述启动代码入口模块为应用层代码的启动代码入口函数;
将应用层代码编译生成的二进制文件烧录到微处理器。
上述的方法,其中:
第一类编程语言为C语言或汇编语言,第二类编程语言为RUST语言。
上述的方法,其中:
所述的接口代码模块至少包括能被所述微处理器执行的且被所述外设硬件所响应的指令,藉此实现所述微处理器对所述外设硬件的控制。
上述的方法,其中:
应用层代码经由调用所述接口代码模块,从而在应用层代码中实现所述微处理器操作所述外设硬件预设的硬件功能。
上述的方法,其中:
在编译应用层代码阶段,还将应用层代码所需要调用的所述接口代码模块合并到由应用层代码所编译的二进制文件中。
上述的方法,其中:
包括所述微处理器及外设硬件的***的启动和初始化过程利用第一类编程语言编写的代码来执行;
在***完成初始化后,从基于第一类编程语言的运行环境中切换到基于第二类编程语言的运行环境中,以执行所述的应用层代码。
上述的方法,其中:
第一静态链接库具有基于第一类编程语言编写的***引导部分所编译的部分;
第二类编程语言编写的程序的入口地址定义为所述***引导部分;以及
将第一静态链接库链接到第二类编程语言编译生成的二进制文件中,生成可执行文件藉此该可执行文件由第一和第二类编程语言混合生成。
在本发明的一个较佳的可选的实施方式中,还披露了一种带有微处理器和外设硬件的***的运行方法,其中,该方法主要包括:
提供基于第一类编程语言编写的访问外设硬件的接口代码模块和启动代码入口模块;
将基于第一类编程语言编写的代码编译成第一静态链接库;
利用第二类编程语言编写调用所述接口代码模块的应用层代码;
编译基于第二类编程语言编写的应用层代码,指定所述第一静态链接库为链接库,指定所述启动代码入口模块为应用层代码的启动代码入口函数;
执行***的启动和初始化过程并且是利用所述第一类编程语言编写的代码来执行;
在完成***的初始化后,***从第一类编程语言的运行环境切换到第二类编程语言的运行环境中,以执行所述应用层代码。
上述的方法,其中:
第一静态链接库具有基于第一类编程语言编写的***引导部分所编译的部分;
第二类编程语言编写的程序的入口地址设为外部地址,且该外部地址设为所述***引导部分;以及
将第一静态链接库链接到第二类编程语言编译生成的二进制文件中,生成可执行文件藉此该可执行文件由第一和第二类编程语言混合生成。
上述的方法,其中:
所述的接口代码模块至少包括能被所述微处理器执行的且被所述外设硬件所响应的指令,以及在应用层代码调用所述接口代码模块时,由第一类编程语言的接口代码模块来屏蔽第二类编程语言对外设硬件的直接访问。
附图说明
阅读以下详细说明并参照以下附图之后,本发明的特征和优势将显而易见:
图1是本申请披露的实现微处理器对外设硬件控制的方法的流程示意图。
具体实施方式
下面将结合各实施例,对本发明的技术方案进行清楚完整的阐述,但所描述的实施例仅是本发明用作叙述说明所用的实施例而非全部的实施例,基于该等实施例,本领域的技术人员在没有做出创造性劳动的前提下所获得的方案都属于本发明的保护范围。
现有的在微处理器和外设硬件的配合场景中,需要预先在处理器中烧录好按照预定功能的程序,例如单片机内部的外设一般包括:串口控制模块,SPI模块,I2C模块,数模或模数转换的AD模块,PWM模块,CAN模块,EEPROM,比较器等模块,等等它们都可以直接集成在单片机内部,鉴于处理器内部设有相对应的内部控制寄存器,可通过单片机指令直接控制内部外设。此外相对于处理器个体而言的外设类型还可以是单片机外部的***功能模块,比如键盘控制芯片,液晶显示,A/D转换芯片,触控模块,温度或电压或电流的参数检测模块,测量模块,传感器,存储器,功率开关,指纹验证模块,人脸验证模块和语音验证模块,智能密码锁,可控灯具,电机模块或音响蜂鸣模块等等。总而言之处理器的外设硬件的种类繁多,外设硬件十分丰富,按照设计者的实际需求来选择带有预期/预设硬件功能的外设硬件。标准配置的处理器还带有各种兼容的总线模块,外设硬件可通过处理器的I/O,SPI,I2C等总线来控制。当前的嵌入式软件设计中,开发者基于设计的便捷性和可靠性,很多方案采用状态机或者层次状态机的设计,尽管存在带OS***和不带OS***基于中断前后台的程序方案,但本质上程序还是使用状态机设计,仍然由本机自行维护状态转换等操作,这样在开发中会造成很大的困惑:在面对大规模的物联网节点时,过于依靠这种设计会造成通信协议的复杂化和节点软件体积膨胀,且不能灵活满足多变的外部需求,造成开发成本提高和开发进度缓慢。
传统的嵌入式软件开发中通常使用C语言和汇编语言进行开发,这两种编程语言灵活强大,具备极高的性能,尤其是它们最贴近硬件,是实现硬件功能的底层语言。使用底层语言对开发者的技术要求较高但开发效率较低,在很多场合通常是将这两种语言进行混合使用,在汇编语言设置好硬件、初始化好堆栈之后便将***的控制权转交到了C语言代码中。在主流的嵌入式***中,正是考虑到汇编语言的复杂晦涩,目前C语言在嵌入式开发中占据了主流地位。使用C语言相比汇编语言是一大进步,但是C语言依旧有它的不足,在开发中极易发生问题:主要问题在于它的参数类型检查不够严格,对于数组越界等情况没有内建的检查支持,极易导致***在运行中发生崩溃等异常现象。
参见图1,在一个可选但非必须的实施例中,一种实现微处理器对外设硬件控制的方法主要包括:利用第一类编程语言编写由微处理器执行的启动代码和初始化代码,注意这里所谓的第一类编程语言主要是更靠近底层硬件的描述语言,因此其较多场合使用实现预定硬件功能的底层语言,采用静态语言是较为合适的选择。在可选的实施例中,第一类编程语言采用汇编语言和/或者C语言。对于整合有处理器和外设硬件的***而言,兼容于传统的编程方式,可使用C语言编写启动代码和硬件初始化代码,嵌入式程序可以将***的启动和初始化过程利用更贴近描述硬件的C语言代码来执行,见步骤S101。
参见图1,为了构建处理器和外设硬件之间的通信机制,而且这种通信能兼容市面上的基于主流指令集/架构的处理器,让处理器能对外设硬件下达各种命令或说传输携带有指令的数据,主要是使用低级语言编写外设硬件的访问接口。例如使用C语言编写简单的硬件访问接口,后续在使用高级语言进行复杂的软件逻辑设计,高级语言通过底层的低级语言接口来访问和控制硬件,因此主要的思想是:提供基于第一类编程语言编写的访问外设硬件的接口代码模块和启动代码入口模块,见图1中步骤S101。通过低级语言将高级语言和底层的硬件隔离开,基于此点,可以结合低级语言擅长控制硬件的能力和高级语言擅长实现复杂逻辑且安全的特点,提升开发效率和降低出错率。
参见图1,上文已经介绍了需要利用第一类编程语言编写了可由微处理器执行的启动代码和初始化代码,而且还单独设计了基于第一类编程语言编写的访问外设硬件的接口代码模块和启动代码入口模块,后续还需要将基于第一类编程语言编写的代码编译成第一静态链接库,接口代码作为访问硬件的间接接口,提供对硬件更复杂的逻辑操作。静态链接库的设计方案在本申请中有诸多优势,例如,基于安全和防止反编译的考虑,核心程序或代码需加密但能调用,基于第一类编程语言编写的代码直接封装成链接库的形式然后再提供被链接的服务及功能,符合本申请的安全指标,参见步骤S102。
参见图1,基于行业的共识,编程语言随着从低级到高级的趋势使得编程语言的语义功能也越来越完善,实质上的意思是指编写的程序越来越接近人类的语言,也越来越容易被人类阅读和理解,和符合人类的阅读思维和习惯,但是同时也失去了对底层硬件的直接操纵能力,而且执行效率显得越来越低。最低级的机器语言全部是各种逻辑数字,很难从逻辑数字的字面看出来它指代是什么意思,但是它对硬件操纵能力最强,接近于直接对硬件下达命令而指示做硬件该怎么做怎么执行命令,它的执行效率接近为百分之百。其次是汇编语言这种低级语言,汇编语言虽然稍微向前迈进了一点,相对于最低级的机器语言是很大的进步,但也有限,人类对它的阅读也没那么直观,其操纵硬件的能力也很强,执行效率基本也接近百分之百。而C语言介于高级语言和低级语言之间,代码相对而言容易被阅读者理解,在部分场合还可以使用指针操纵硬件,执行效率约为80%,它对于缺乏实现复杂逻辑思维的底层语言来说,具有较高的实用性,而且被业界广为接收。在上文中已经介绍:使用类似于C语言等低级的第一类编程语言编写简单的硬件访问接口,目的是利用它对硬件较为直接和的操控,参见图1的步骤S101-102,少了不必要的冗余代码 所以执行速度和占用资源情况理想。然而第一类编程语言并非是完美的,虽然它靠近底层但对硬件的复杂逻辑控制欠佳,但依旧有它的不足,在开发中极易发生问题,主要问题在于它的参数类型检查不够严格,对于数组越界等情况没有内建的检查支持,极易导致***在运行中发生崩溃等异常现象。参见图1的步骤S103,利用第二类编程语言编写调用所述的接口代码模块的应用层代码,第二类编程语言在语言排序上相对于第一类语言属于相对高级的编程语言。这里的应用层代码相对符合人类的逻辑习惯,基本用各种逻辑表达式以及其他的控制语句来实现,开发的效率高,而且能实现更复杂的逻辑控制。在编译基于第二类编程语言编写的应用层代码期间,需要指定上文所述的第一静态链接库为应用层代码自身的链接库,同步还需要指定上文所述的启动代码入口模块为应用层代码的启动代码入口函数,参见图1的步骤S104。在编译第二类编程语言代码,将第一静态链接库指定为应用层代码的链接库,同时指定应用层代码的启动代码入口为启动代码入口模块,必须注意的是,所谓的启动代码入口模块的地址在应用层代码中是不存在的,从而将应用层代码所需的接口合并到应用层代码的二进制文件中。核心思想是:用第二类编程语言进行复杂的软件逻辑设计,第二类编程语言则通过第一类编程语言接口来访问和控制硬件,通过第一类编程语言将第二类编程语言和底层的硬件隔离开,不直接发生操控硬件而是间接地访问硬件,可以结合第一类编程语言擅长控制硬件的能力和结合第二类编程语言可实现复杂逻辑的特征及安全性特点,提升整个***的开发效率和降低出错率。最终将第二类编程语言编译生成的二进制文件烧录到硬件***中并运行,参见图1的步骤S105。
参见图1,在一个可选的实施例中,第一类编程语言为C语言或汇编语言等底层的能直接操控硬件的语言,第二类编程语言为更高级的语言,如RUST语言等静态语言。
参见图1,在一个可选的实施例中,接口代码模块至少包括能被所述微处理器执行的且被所述外设硬件所响应的指令,例如作为示范但不作为限制,某些接口代码模块包含某类逻辑指令,外设硬件在接收到这些逻辑指令时会做出对应的响应动作,例如逻辑指令是高低电平就可以输出相对的高低电位,而外设硬件在接收到不同的高低电位时就会响应出不一样的硬件功能,从而通过访问硬件的接口实现微处理器对外设硬件的控制。
参见图1,在一个可选的实施例中,应用层代码经由调用接口代码模块,从而在应用层代码中实现微处理器操作外设硬件预设的硬件功能。考虑到应用层代码自身预设的对硬件操作中存在的复杂逻辑,应用层代码不直接操控硬件,通过调用接口代码模块,间接的通过接口来操作硬件。不同的硬件具有不同预设的硬件功能,例如测量用的硬件主要的功能就是测量数据,感测某预定信号用的硬件主要的功能就是侦测信号,显示器这类硬件的主要功能就是显示可视化的文字,等等,硬件不同导致相应的硬件功能也略有不同,因此这里硬件预设的硬件功能就是指那些作用功能十分明确的某种硬件所带有的功能。
参见图1,在一个可选的实施例中,在编译应用层代码阶段,将应用层代码需要调用的接口代码模块合并到由应用层代码所编译的二进制文件中。期间,在编译第二类编程语言编写的代码过程中,需要将静态链接库指定为第二类编程语言相关程序的链接库,同时指定第二类编程语言相关程序的启动代码入口为前文记载的启动代码入口模块,这里的启动代码入口模块的地址在第二类编程语言中是不存在的,将第二类编程语言相关程序所需的接口合并到第二类编程语言编写的程序或代码编译的二进制文件中。
参见图1,在一个可选的实施例中,包括微处理器及外设硬件的***(可包含嵌入式***)的启动和初始化过程利用第一类编程语言编写的代码来执行;在***完成初始化后从基于第一类编程语言的运行环境中切换到基于第二类编程语言的运行环境中,也即***从直接能操控硬件的底层语言运行环境中切换到能实现那些复杂逻辑的高级语言的运行环境中,以执行应用层代码,这是***在不同运行环境下切换实现硬件控制的方式。
参见图1,在一个可选的实施例中,上文的第一静态链接库具有该第一类编程语言编写的***引导部分所编译的部分。在***启动之初,***的内存并不是直接可读写的,内存中也没有可以执行的内核代码,这就需要进行***引导。***引导是指在操作***内核运行之前运行的引导程序,通过引导程序,初始化硬件设备、建立内存空间的映射图并为最终调用操作***内核准备好正确的运行环境。引导程序通常存放在内部或外部的非易失存储设备上。基于***引导部分,第二类编程语言编写的程序的入口地址定义为所谓的***引导部分;将第一静态链接库链接到第二类编程语言编译生成的二进制文件中,生成可执行文件藉此该可执行文件由第一和第二类编程语言混合生成。例如:将底层语言代码编写的***引导部分编译为静态库,在高级语言代码或应用层程序中将自身程序的入口地址设置为外部地址,这个外部地址可以使用底层语言代码的***引导部分,将此处的静态库链接到高级语言程序编译生成的二进制文件中,生成可执行文件,这个可执行文件便直接为高级语言和低级语言共同生成。
参见图1,在一个可选的实施例中,本申请还披露了一种带有微处理器和外设硬件的***的运行方法,其运行方法主要包括:首先,提供基于第一类编程语言编写的访问外设硬件的接口代码模块和启动代码入口模块,参见步骤S101;然后,将基于第一类编程语言编写的代码编译成第一静态链接库,参见步骤S102;再者,利用第二类编程语言编写调用所述的接口代码模块的应用层代码,参见步骤S103;最终编译基于第二类编程语言编写的应用层代码,参见步骤S104,指定该第一静态链接库为链接库,指定所谓的启动代码入口模块为应用层代码的启动代码入口函数;之后:执行***的启动和初始化过程并且***是利用所述第一类编程语言编写的代码来执行启动和初始化过程;***的运行方法还包括:在完成***的初始化后,***从第一类编程语言的运行环境切换到第二类编程语言的运行环境中,执行应用层代码完成应用层的硬件操作。所谓的应用层代码是指利用第二类编程语言编写调用上述接口代码模块的间接操控硬件的代码。在可选但非必须的实施例中,第一静态链接库具有基于第一类编程语言编写的***引导部分所编译的部分;第二类编程语言编写的程序的入口地址设为外部地址,且该外部地址设为***引导部分;以及将第一静态链接库链接到第二类编程语言编译生成的二进制文件中,生成可执行文件藉此该可执行文件由第一类编程语言和第二类编程语言混合生成。在可选的实施例中,接口代码模块至少包括能被微处理器执行的且被外设硬件所响应的指令,以及在应用层代码调用接口代码模块时,由第一类编程语言的接口代码模块来屏蔽第二类编程语言对外设硬件的直接访问,而是第二类编程语言通过接口间接的访问外设硬件。
如果划分三层架构:应用层、底层语言、硬件部分,采用本申请上文内容在嵌入式平台上操作某个硬件的过程如下:使用底层语言编写***启动代码和硬件初始化代码,对外提供控制硬件的对应接口order1()和/或order2(),这里的第一控制接口模块/第二控制接口模块order1()和/或order2()还可以是其他的逻辑函数例如on()和/或off(),启动代码的入口为_start(),它也可以是对应接口的启动的代码入口。然后再将编写完成并测试好的底层语言代码编译为libsys.a,libsys.a在这里也即视为静态链接库,属于编译好的二进制文件;然后编写高级语言的应用代码,应用代码在控制硬件上采用循环调用控制硬件的对应控制接口order1()和/或order2()。如:硬件接收到order1()则做出相对的动作以响应于命令,以功率开关为例,order1()是逻辑高电平则功率管接通;硬件接收到order2()则做出相对的动作以响应于命令,order2()是逻辑低电平则功率管关断。在编写高级语言的应用代码的基础上编译高级语言代码,将libsys.a指定为链接库,同时指定高级语言的启动代码入口为_start(),此_start()地址在高级语言中不存在,将高级语言应用层所需的接口合并到高级语言的二进制文件中,后续再将高级语言编译生成的二进制文件烧录到硬件***中并运行,整个***就在两套语言的运行环境下运作。
在可选的实施例中,可以将MOZILLA等开发的Rust等类似的高级语言引入到嵌入式开发中,也可以引入C++及JAVA等适合做嵌入式上层软件,避免类似C语言等相对低级的语言在使用中出现野指针、数组越界等情况,减少出错率和提升开发效率,保持高性能和低成本。对于嵌入式程序,可将***的启动和初始化过程利用原有的相对低级的语言代码来执行,完成***初始化后,从相对低级的语言的运行环境切换到相对高级语言的运行环境中,执行应用代码。将相对低级的代码编写的***引导部分编译为静态库,在相对高级语言链中将程序的入口地址设置为外部地址,外部地址也即相对低级的语言代码的***引导部分,将此静态库链接到相对高级语言编译生成的二进制文件中,生成可执行文件并且这个可执行文件便为相对高级和相对低级语言共同生成。使用本发明,可以利用相对高级语言的内存安全、强类型的特点,减少编程中出现的野指针、数组越界和内存泄露等问题,同时可以引入现代语言高质量的Vector、Set等基础库,提升开发效率,加快产品的研发速度。使用相对低级的语言编写简单的硬件访问接口,使用相对高级的语言进行复杂的软件逻辑设计,相对高级的语言通过相对低级的语言接口来访问和控制硬件。通过相对低级的语言将相对高级的语言与底层硬件隔离开,结合相对低级的语言擅长控制硬件的能力和相对高级的语言实现复杂逻辑及安全性特点,提升开发效率和降低出错率。
在可选的实施例中,可以将Python、JavaScript等动态语言引入嵌入式开发领域的方法,动态语言具有极高的开发效率和一定的安全性——在运行出错时不会导致***完全崩溃,动态语言所需要的资源较多,执行速度相对缓慢,对于一些实时性比较重要和对性能要求较高的应用,是高级语言的可选项。除此之外,用动态语言来开发的替代方案就是利用本申请上文介绍的静态语言开发,本申请的重点之一是在嵌入式***中使用相对高级的静态语言进行应用层开发,和将相对低级的语言编译为静态库,提供给相对高级的静态语言使用并生成混合的二进制可执行文件。因此在可选的实施例中,本申请还包括嵌入式软件的开发方法,特别是涉及到一种可以在单片机上将不同的静态编程语言混合起来生成可执行文件的方法,可执行文件再由单片机或处理器执行。在可选的实施例中,多个接口代码模块按时序或时间规则从先到后依次被调用并执行。考虑到***会遭遇故障,这对所有的处理器几乎是不可避免的,在本申请的可选实施例中,解决方案之一是在崩溃故障事件被处理器感测到之后,处理器马上执行基于第一类编程语言运行环境下的***启动和初始化进程,此期间处理器间隔性地分时段反复尝试进入第二类编程语言的运行环境中利用应用层代码调用/链接接口代码模块,如果调用任意一个接口代码模块成功,则直接跳变到依次调用并执行按照时序规则排序的多个接口代码模块:譬如多个接口代码模块中规定首个接口代码在时序上最先被调用及执行,然后第二个接口代码先调用及执行,依此类推直至末尾的最后的接口代码在时序上最后被调用及执行。注意在间隔性地反复尝试进入第二类编程语言的运行环境中利用应用层代码调用接口代码模块或链接到接口代码模块的步骤中,这期间被调用成功的那一个接口代码模块并不被实际执行,处理器只要尝试到在调用流程中能链接到它即可而不必执行,直至处理器跳变到依次调用并执行按照时序规则排序的多个接口代码模块的过程当中,被调用成功的那一个接口代码模块才按照它自己的时序排序被调用执行。在一个具体故障事件的实施例中,当处理器执行基于第一类编程语言运行环境下的***启动和初始化进程阶段,处理器间隔性地分时段反复尝试进入第二类编程语言的运行环境中利用应用层代码链接接口代码模块,假定此时应用层代码链接或者调用所有接口当中时序排第K的接口代码模块成功,此时排第K的接口代码模块仅仅是被尝试调用链接一次而不予执行,相当于排第K的接口代码模块对应的硬件操作动作实际上是不执行的,处理器识别到能够成功调用或链接到这个接口之后,然后处理器再直接径自跳变到依次调用并执行按照时序规则排序的多个接口代码模块(排第1的接口、排第2的接口…、排第K的接口…等)的模式中。在处理器直接跳变到依次调用并执行按照时序规则排序的多个接口代码模块的进程中,排第1的接口最先被调用及执行,然后是排第2的接口代码被调用及执行,排第3的接口被调用和执行,…,以及相邻前一个排在第K-1的接口模块被调用和执行,排在第K的接口模块被调用和执行,相邻后一个排在第K+1的接口模块被调用和执行,…,依此类推直至排到末尾的最后的接口代码在时序上最后被调用及执行,在所有的接口代码模块按照它们自己的时序排序而依次被处理器调用和执行阶段,而之前被尝试调用或链接成功的时序排在第K的接口代码模块此时则是第K名次被调用和执行:这里自然数K取大于1。在一个可选的实施例中,上述崩溃故障事件被处理器感测到之后,在处理器执行***启动和初始化进程的期间,虽然间隔性地分时段反复尝试进入第二类编程语言的运行环境中利用应用层代码调用链接接口代码模块,即使是已经采取反复启动及初始化动作,这期间仍然有可能没有任何一个接口代码模块能够被应用层代码的调用流程所成功链接上,这种故障可能属于***无法自行修复的崩溃事件,处理器或***可以直接进入休眠状态并等待人为干预或检修。处理器或是其采用它的计算机已经渗透到各行各业,典型的例如,处理器***在自动化、人工智能或无人值守的诸多应用领域得到长足的发展,在当前的技术领域,处理器***遭遇故障事件时很大部分时候是待机或DOWN机或停机,这会造成很大的经济损失甚至危险。本申请在解决方案上提出了在崩溃故障事件被处理器感测到之后,处理器马上执行基于第一类编程语言运行环境下的***启动和初始化进程,此期间处理器间隔性地分时段反复尝试进入第二类编程语言的运行环境中利用应用层代码调用/链接接口代码模块,由于此阶段应用层代码调用所有接口当中链接成功的那个接口代码模块仅仅是被尝试调用而不予执行,相当于链接成功的接口代码模块对应的硬件操作动作实际上是不执行的,这和当前的技术领域带有处理器***的电子设备处于待机或DOWN机或停机的功耗是一致的。
以上通过说明和附图,给出了具体实施方式的特定结构的典型实施例,上述发明提出了现有的较佳实施例,但这些内容并不作为局限。对于本领域的技术人员而言,阅读上述说明后,各种变化和修正无疑将显而易见。因此,所附的权利要求书应看作是涵盖本发明的真实意图和范围的全部变化和修正。在本申请权利要求书范围内任何和所有等价的范围与内容,都应认为仍属本发明的意图和范围内。
Claims (10)
1.一种实现微处理器对外设硬件控制的方法,其特征在于,包括:
利用第一类编程语言编写由微处理器执行的启动代码和初始化代码;
提供基于第一类编程语言编写的访问外设硬件的接口代码模块和启动代码入口模块;
将基于第一类编程语言编写的代码编译成第一静态链接库;
利用第二类编程语言编写调用所述接口代码模块的应用层代码;
编译基于第二类编程语言编写的应用层代码,指定所述第一静态链接库为链接库,指定所述启动代码入口模块为应用层代码的启动代码入口函数;
将应用层代码编译生成的二进制文件烧录到微处理器;
在崩溃故障事件被微处理器感测到之后,微处理器马上执行基于第一类编程语言运行环境下的***启动和初始化进程,此期间微处理器间隔性地分时段反复尝试进入第二类编程语言的运行环境中利用应用层代码调用接口代码模块,如果调用任意一个接口代码模块成功,则直接跳变到依次调用并执行按照时序规则排序的多个接口代码模块;
在间隔性地反复尝试进入第二类编程语言的运行环境中利用应用层代码调用接口代码模块的步骤中,这期间被调用成功的那一个接口代码模块并不被实际执行,微处理器只要尝试到在调用流程中能链接到它即可而不必执行,直至微处理器跳变到依次调用并执行按照时序规则排序的多个接口代码模块的过程当中,被调用成功的那一个接口代码模块才按照它自己的时序排序被调用执行。
2.根据权利要求1所述的方法,其特征在于:
第一类编程语言为C语言或汇编语言,第二类编程语言为RUST语言。
3.根据权利要求1所述的方法,其特征在于:
所述的接口代码模块至少包括能被所述微处理器执行的且被所述外设硬件所响应的指令,藉此实现所述微处理器对所述外设硬件的控制。
4.根据权利要求1所述的方法,其特征在于:
应用层代码经由调用所述接口代码模块,从而在应用层代码中实现所述微处理器操作所述外设硬件预设的硬件功能。
5.根据权利要求1所述的方法,其特征在于:
在编译应用层代码阶段,还将应用层代码所需要调用的所述接口代码模块合并到由应用层代码所编译的二进制文件中。
6.根据权利要求1所述的方法,其特征在于:
包括所述微处理器及外设硬件的***的启动和初始化过程利用第一类编程语言编写的代码来执行;
在***完成初始化后,从基于第一类编程语言的运行环境中切换到基于第二类编程语言的运行环境中,以执行所述的应用层代码。
7.根据权利要求1所述的方法,其特征在于:
第一静态链接库具有基于第一类编程语言编写的***引导部分所编译的部分;
第二类编程语言编写的程序的入口地址定义为所述***引导部分;以及
将第一静态链接库链接到第二类编程语言编译生成的二进制文件中,生成可执行文件藉此该可执行文件由第一和第二类编程语言混合生成。
8.一种带有微处理器和外设硬件的***的运行方法,其特征在于,包括:
提供基于第一类编程语言编写的访问外设硬件的接口代码模块和启动代码入口模块;
将基于第一类编程语言编写的代码编译成第一静态链接库;
利用第二类编程语言编写调用所述接口代码模块的应用层代码;
编译基于第二类编程语言编写的应用层代码,指定所述第一静态链接库为链接库,指定所述启动代码入口模块为应用层代码的启动代码入口函数;
利用所述第一类编程语言编写的代码来执行***的启动和初始化过程;
在完成***的初始化后,***从第一类编程语言的运行环境切换到第二类编程语言的运行环境中,以执行所述应用层代码;
在崩溃故障事件被微处理器感测到之后,微处理器马上执行基于第一类编程语言运行环境下的***启动和初始化进程,此期间微处理器间隔性地分时段反复尝试进入第二类编程语言的运行环境中利用应用层代码调用接口代码模块,如果调用任意一个接口代码模块成功,则直接跳变到依次调用并执行按照时序规则排序的多个接口代码模块;
在间隔性地反复尝试进入第二类编程语言的运行环境中利用应用层代码调用接口代码模块的步骤中,这期间被调用成功的那一个接口代码模块并不被实际执行,微处理器只要尝试到在调用流程中能链接到它即可而不必执行,直至微处理器跳变到依次调用并执行按照时序规则排序的多个接口代码模块的过程当中,被调用成功的那一个接口代码模块才按照它自己的时序排序被调用执行。
9.根据权利要求8所述的方法,其特征在于:
第一静态链接库具有基于第一类编程语言编写的***引导部分所编译的部分;
第二类编程语言编写的程序的入口地址设为外部地址,且该外部地址设为所述***引导部分;以及
将第一静态链接库链接到第二类编程语言编译生成的二进制文件中,生成可执行文件藉此该可执行文件由第一和第二类编程语言混合生成。
10.根据权利要求8所述的方法,其特征在于:
所述的接口代码模块至少包括能被所述微处理器执行的且被所述外设硬件所响应的指令,以及在应用层代码调用所述接口代码模块时,由第一类编程语言的接口代码模块来屏蔽第二类编程语言对外设硬件的直接访问。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710652605.2A CN109388430B (zh) | 2017-08-02 | 2017-08-02 | 实现微处理器对外设硬件控制的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710652605.2A CN109388430B (zh) | 2017-08-02 | 2017-08-02 | 实现微处理器对外设硬件控制的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109388430A CN109388430A (zh) | 2019-02-26 |
CN109388430B true CN109388430B (zh) | 2022-07-22 |
Family
ID=65412133
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710652605.2A Active CN109388430B (zh) | 2017-08-02 | 2017-08-02 | 实现微处理器对外设硬件控制的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109388430B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112860609B (zh) * | 2019-11-26 | 2024-04-26 | 纳恩博(常州)科技有限公司 | 实现i2c通讯的方法和滑板车及存储介质 |
CN111176657B (zh) * | 2019-12-12 | 2023-04-28 | 上海微波技术研究所(中国电子科技集团公司第五十研究所) | 基于ttcn-3测试平台的c语言编解码器实现方法和*** |
CN111773733B (zh) * | 2020-07-06 | 2024-04-19 | 北京思明启创科技有限公司 | 基于Arcade平台的编程方法、设备及存储介质 |
CN111858177B (zh) * | 2020-07-22 | 2023-12-26 | 广州六环信息科技有限公司 | 进程间通信的异常修复方法、装置、电子设备及存储介质 |
CN112000393A (zh) * | 2020-08-25 | 2020-11-27 | 上海连尚网络科技有限公司 | 小程序的运行方法和装置 |
CN112214213B (zh) * | 2020-10-27 | 2023-10-20 | 南方电网数字电网科技(广东)有限公司 | Linux内核的开发和管理方法、装置、计算机设备和存储介质 |
CN113590478B (zh) * | 2021-07-17 | 2023-08-29 | 郑州威科姆华大北斗导航科技有限公司 | 一种卫星接收模块的自动化烧录测试装置和方法 |
CN118245309B (zh) * | 2024-05-24 | 2024-07-26 | 北京开源芯片研究院 | 芯片验证的多语言兼容方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6513154B1 (en) * | 1996-10-21 | 2003-01-28 | John R. Porterfield | System and method for testing of computer programs in programming effort |
CN1632763A (zh) * | 2004-12-15 | 2005-06-29 | 时仁帅 | 用于嵌入式模块中汇编程序的自动查错改错方法和*** |
CN103106096A (zh) * | 2012-11-27 | 2013-05-15 | 武汉大学 | 一种针对嵌入式微处理器的反汇编方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7634779B2 (en) * | 2002-11-20 | 2009-12-15 | Sun Microsystems, Inc. | Interpretation of DVD assembly language programs in Java TV-based interactive digital television environments |
US7493481B1 (en) * | 2004-05-17 | 2009-02-17 | Netxen, Inc. | Direct hardware processing of internal data structure fields |
US20070033592A1 (en) * | 2005-08-04 | 2007-02-08 | International Business Machines Corporation | Method, apparatus, and computer program product for adaptive process dispatch in a computer system having a plurality of processors |
TW200837588A (en) * | 2007-03-07 | 2008-09-16 | Advanced Analog Technology Inc | Aid design system for analog integrated circuit and the method thereof |
CN101551747B (zh) * | 2009-04-09 | 2012-06-20 | 怯肇乾 | Arm系列微处理器的软件体系架构工具 |
CN101763265B (zh) * | 2010-01-19 | 2012-10-03 | 湖南大学 | 一种过程级软硬件协同设计自动化开发方法 |
CN101826014B (zh) * | 2010-04-20 | 2013-05-08 | 北京邮电大学 | 一种软件工程源代码的分割方法 |
CN102662842B (zh) * | 2012-04-11 | 2016-02-03 | 贵州航天风华精密设备有限公司 | 一种基于Java平台的航天器测试软件构架及其测试方法 |
CN104216709B (zh) * | 2014-08-20 | 2016-04-27 | 深圳光启智能光子技术有限公司 | 操作***中直接控制硬件设备的方法和装置 |
CN104267956B (zh) * | 2014-09-28 | 2016-05-11 | 深圳光启智能光子技术有限公司 | 一种操作***中控制硬件设备的方法和装置 |
CN105389222B (zh) * | 2015-12-15 | 2018-12-21 | 中国科学院声学研究所 | 一种动态调用原生接口的方法、装置和*** |
-
2017
- 2017-08-02 CN CN201710652605.2A patent/CN109388430B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6513154B1 (en) * | 1996-10-21 | 2003-01-28 | John R. Porterfield | System and method for testing of computer programs in programming effort |
CN1632763A (zh) * | 2004-12-15 | 2005-06-29 | 时仁帅 | 用于嵌入式模块中汇编程序的自动查错改错方法和*** |
CN103106096A (zh) * | 2012-11-27 | 2013-05-15 | 武汉大学 | 一种针对嵌入式微处理器的反汇编方法 |
Non-Patent Citations (2)
Title |
---|
Embedded On-Board Computer System Design Based on the SPARC V8 Architecture Processor;Zhang Yong-xiang ET AL;《2009 International Conference on New Trends in Information and Service Science》;20090925;全文 * |
基于ADSP-TS101的嵌入式***混合编程及优化方法;苏延川;《现代电子技术》;20091015(第20期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109388430A (zh) | 2019-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109388430B (zh) | 实现微处理器对外设硬件控制的方法 | |
US8341602B2 (en) | Automated verification of a type-safe operating system | |
US5129064A (en) | System and method for simulating the I/O of a processing system | |
Feng et al. | Certifying low-level programs with hardware interrupts and preemptive threads | |
Faulk et al. | On synchronization in hard-real-time systems | |
US8429669B2 (en) | Virtual machine switching control by prefetching information out of and updating a set of processor control information based on a bitmap having update status | |
US9886268B1 (en) | Dual programming interface | |
JPS6017539A (ja) | エミユレ−シヨン方式 | |
US20220414052A1 (en) | Multi-Core Processor, Multi-Core Processor Processing Method, and Related Device | |
Kant | Microprocessors and Microcontrollers: Architecture, Programming and System Design 8085, 8086, 8051, 8096 | |
CN104137074A (zh) | 多环境计算***中资源使用的优化 | |
Derin et al. | A system-level approach to adaptivity and fault-tolerance in NoC-based MPSoCs: The MADNESS project | |
Parnas et al. | Design and specification of the minimal subset of an operating system family | |
CN111008056B (zh) | 一种bios设置界面语言配置方法和装置 | |
CN113220300A (zh) | 一种应用于Android***x86架构上的ARM指令集转换方法 | |
US6560698B1 (en) | Register change summary resource | |
US8135943B1 (en) | Method, apparatus, and computer-readable medium for generating a dispatching function | |
JPS63173130A (ja) | 計算機の命令セツトを拡張するための装置 | |
McCartney et al. | Stackless multi-threading for embedded systems | |
Sun et al. | Formal verification of a task scheduler for embedded operating systems | |
JPS62120542A (ja) | 情報処理装置 | |
Wan et al. | Research on embedded file management system based on Forth virtual machine | |
Colnaric | State of the art review paper: advances in embedded hard real-time systems design | |
EP0327197B1 (en) | I/O simulation | |
Huang et al. | Design memory protection based on embedded operating system with focus on PicoBlaze soft controller |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |