技术领域
[0001] 本发明涉及嵌入式系统领域,尤其涉及一种嵌入式系统。
相关背景技术
[0002] 随着通信技术的发展,出现了各种不同的操作系统和不同的微控制器,其中,操作系统具体可以是实时内核。则由不同操作系统和不同微控制器进行组合可以形成不同的嵌入式系统,使得不同的嵌入式系统对数据处理具有不同运行效率和处理实时性。
[0003] 嵌入式系统往往对不同的操作系统以及微控制器并不兼容,即当不同操作系统或者微控制器移植到嵌入式系统中时,往往需要与嵌入式系统进行适配,从而导致移植效率低下。
具体实施方式
[0017] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0018] 在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。
[0019] 应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0020] 取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于识别”。类似地,取决于语境,短语“如果确定”或“如果识别(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当识别(陈述的条件或事件)时”或“响应于识别(陈述的条件或事件)”。
[0021] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
[0022] 下面结合附图对本发明的一些实施方式作详细说明。在各实施例之间不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
[0023] 图1为本发明实施例提供的一种嵌入式系统的结构示意图,如图1所示,该嵌入式系统包括:硬件层、操作系统层、通用操作系统接口以及适配层。
[0024] 在对本发明各实施例提供的嵌入式系统中各部分的具体工作过程进行详细描述之前,还可以先对嵌入式系统的整体工作过程进行描述:
[0025] 对于应用于不同领域中的嵌入式系统,其作为一个具有独立数据处理能力的器件能够接收到外部产生的各种指令,比如控制指令、配置指令等,并对该指令进行处理。处理结果可以作为待写入文件写入嵌入式系统中硬件层包含的存储单元中。可选地,存储单元是指硬件层中微控制器内配置的每一位寄存器。
[0026] 基于上述的文件写入过程,嵌入式系统中各层的工作过程具体为:
[0027] 操作系统层可以借助通用操作系统接口获取待写入文件。其中,通过对至少一种操作系统各自支持的操作系统接口提供的功能进行封装即可得到通用操作系统接口。即此通用操作系统接口支持至少一种操作系统中所有接口所提供的功能。并且由于操作系统中部署有实时内核,所以利用通用操作系统接口可以提供一个统一的标准以使嵌入式系统兼容多种实时内核。其中,待写入文件具体可以包括:嵌入式系统响应指令后产生的各自文件,如响应于配置指令产生的配置文件、响应于控制指令产的数据文件以及临时文件等等。
[0028] 接着,在操作系统层获取到待写入文件后,其还可以进一步调用适配层,以确定硬件层对应的目标接口。然后,操作系统层再通过调用此目标接口,将待写入文件写入硬件层中的存储单元。可选地,适配层具体可以表现为函数,以由操作系统通过调用此函数来进一步实现目标接口的调用。其中,此适配层可以认为是操作系统层实现目标接口调用的中间媒介,以实现操作系统层向硬件层的文件写入。
[0029] 另外,由于操作系统层中包含实时内核,硬件层包含配置有至少一个寄存器的微控制器,因此,借助适配层也即是使得不同的实时内核能够与不同的微控制器实现数据交互,即使得嵌入式系统能够兼容多种实时内核和微控制器。
[0030] 其中,嵌入式系统中的硬件层包括的微控制器是嵌入式系统硬件层的核心,主要负责对信息的运算处理,相当于通用计算机的中央处理器。目前主流的微控制器的型号可以包括:8051单片机,AVR微控制器,以及高级精简指令集机器(Advanced RI SC Mach i nes,简称ARM)微控制器等等。可选地,硬件层还可以包括与微控制器连接的外围设备。外围设备是嵌入式系统中用于完成存储、通信、调试、显示等辅助功能的其他部件。目前常用的外围设备按功能可以分为存储设备(如随机存取存储器、静态随机存取存储器、闪存等)、通信设备(如RS‑232接口、串行外设接口、以太网接口等)和显示设备(如显示屏等)三类。
[0031] 其中,嵌入式系统中的操作系统层包含的实时内核主要负责任务调度、同步机制、中断处理、文件处理等。目前主流的开源实时内核包括:免费实时操作系统(Free Rea l T ime Operat i on System,简称FreeRTOS)和实时多线程操作系统(Rea l T ime‑Thread,简称RT‑Thread)。
[0032] 其中,操作系统层调用的目标接口可以认为是对硬件层中存储单元的封装结果,可选地,目标接口具体可以包括:第一接口、第二接口以及第三接口中的至少一种。具体地,一个第一接口用于描述硬件层中一个寄存器的硬件配置,则通常来说,第一接口的数量与硬件层中寄存器的数量相等。其中,硬件配置具体可以包括寄存器的编号、类型、寄存器内存中的位置。第二接口可以用于描述硬件层中寄存器的功能类型。由于寄存器的功能类型包含在寄存器的硬件配置中,因此,第二接口可以认为是对第一接口进行进一步抽象后得到的。且第二接口的数量通常少于第一接口。第三接口用于描述硬件层中每一种功能类型的寄存器的具体工作方式。由于寄存器的功能类型中包括寄存器的工作方式,因此,第三接口可以认为是对第二接口进行进一步抽象后得到的。
[0033] 可见,上述的第一接口至第三接口实际上是对硬件层中寄存器进行不同程度的抽象后得到的,也即是操作系统层借助适配层,能够调用抽象程度不同的接口。
[0034] 其中,由于操作系统层和目标接口都是借助代码实现的,因此,操作系统层调用目标接口实际上就是代码之间的调用。
[0035] 在实现代码调用的过程中,由于C语言的指针灵活且易于使用,操作系统层可以使用C语言进行编写。并且由于Rust语言具有内存安全的特性,适用于编写硬件相关的操作,所以可以使用Rust语言编写对硬件层中的寄存器抽象出的目标接口。
[0036] 由于操作系统层与目标接口采用的编程语言不同,为了实现二者之间的相互调用即实现操作系统层和目标接口之间的调用,可以使用Rust语言构建一个可执行文件,通过执行此文件可以将操作系统层中实时内核的C语言源码编译为静态库类型的代码。然后,可以通过语言交互接口(Fore ign Funct i on I nterface,FFI)实现不同编程语言所写程序间的相互调用,使得操作系统中的C语言代码可以调用Rust语言实现的硬件抽象出的目标接口的代码,硬件抽象出的目标接口的Rust代码也可以调用C语言代码。
[0037] 本实施例中,嵌入式系统包括:硬件层、操作系统层、通用操作系统接口以及适配层。首先,操作系统层借助通用操作系统接口获取待写入文件。然后,操作系统层调用适配层以得到硬件层对应的目标接口。其中,目标接口为对硬件层中的存储单元的封装结果。最终,操作系统再通过调用目标接口,将待写入文件写入硬件层中的存储单元。
[0038] 可见,由于通用操作系统接口能够提供一个统一的标准以支持多种操作系统,因此,嵌入式系统利用此通用操作系统接口能够实现多种操作系统层中部署的实时内核的兼容。同时,可以通过适配层提供的硬件层与操作系统层之间的传输适配功能以实现多种硬件层中多种微控制器的兼容。当嵌入式系统需要部署新的实时内核时,可以不对嵌入式系统中的其他部分进行修改,直接替换实时内核。因此,也即是实现多种实时内核和多种微控制器之间的适配,从而提升嵌入式系统移植的效率。
[0039] 图1所示实施例中已经公开了操作系统层可以借助通用操作系统接口获取待写入文件。可选地,通用操作系统接口可以利用嵌入式系统中的统一内核接口层生成。具体地,统一内核接口层可以先获取至少一种实时内核各自支持的操作系统接口,然后对至少一种实时内核各自支持的操作系统接口提供的功能进行封装,以生成通用操作系统接口。即通用操作系统接口能够实现多种操作系统层中部署的实时内核的兼容,从而节省操作系统开发的成本。
[0040] 在实际中,为了更好地实现操作系统层中实时内核与硬件层中微控制器之间的适配,可以使用硬件抽象层对硬件层中的微控制器进行抽象,以便于操作系统层可以直接调用硬件抽象层封装的目标接口。
[0041] 则图2为本发明实施例提供的另一种嵌入式系统的结构示意图。该嵌入式系统中可以包括:硬件层、操作系统层、统一内核接口层、通用操作系统接口、适配层以及硬件抽象层。
[0042] 硬件抽象层位于硬件层和操作系统层之间,其目的在于对硬件层中的每位寄存器进行不同程度抽象,以分别得第一接口、第二接口以及第三接口。根据图1所示实施例中的描述可知,第一接口可以理解为最低抽象程度所抽象出的接口,即第一接口能够描述硬件层中每位寄存器的硬件配置。在第一接口的基础上,可以再对每位寄存器的硬件配置进一步抽象,即按照每位寄存器的功能类型抽象以得到第二接口。在第二接口的基础上,再按照每个工作类型的寄存器的不同工作方式高度抽象出第三接口。
[0043] 另外,本实施例中未详细描述的内容还可以参见上述实施例中的相关描述,在此不再赘述。
[0044] 本实施例中,嵌入式系统可以包括:硬件层、操作系统层、通用操作系统接口、适配层以及硬件抽象层。硬件抽象层位于硬件层和操作系统层之间,其目的在于按照不同程度对硬件层中的每位寄存器进行抽象,以得到第一接口、第二接口以及第三接口。具体地,第一接口用于描述硬件层中每位寄存器的硬件配置,在第一接口的基础上,对每位寄存器的硬件配置进一步抽象,即按照每位寄存器的功能类型抽象以得到第二接口。在第二接口的基础上,再对每类寄存器的不同工作方式进行高度抽象,以得到第三接口。
[0045] 可见,嵌入式系统中的硬件抽象层可以按照不同程度抽象出多种接口,操作系统层能够借助适配层调用抽象程度不同的第一接口至第三接口中的至少一个接口,从而使得操作系统层无需关心硬件层中的微控制器相关的具体细节即可实现文件的写入,提高了写入效率即提高了嵌入式系统的工作效率。另外,本实施例中未详细描述的内容以及所能实现的技术效果均可以参见上述各实施例中的相关描述,在此不再赘述。
[0046] 图3为本发明实施例提供的一种硬件抽象层的结构示意图。在图2所示的基础上,该嵌入式系统的硬件抽象层具体可以包括:第一抽象层,第二抽象层,第三抽象层,以及位于第一抽象层和第二抽象层之间的中间层。
[0047] 硬件抽象层中的第一抽象层可以获取硬件层的硬件特征描述文件,然后根据该硬件特征描述文件封装出第一接口。可选地,从代码层面来说,第一抽象层抽象出的第一接口的过程可以描述为;用Rust语言提供的命令行工具svd2rust对硬件特征描述文件进行转换,转换结果即为封装得到的第一接口。其中,第一接口用于描述硬件层中每位寄存器的硬件配置。
[0048] 其中,硬件特征描述文件是指微控制器软件接口标准‑系统视图描述文件(Common M i crocontro l l er Software I nterface Standard System Vi ew Descr i pt i on,简称CMS I S‑SVD),此文件描述了硬件层中微控制器以及与微控制器连接的外围设备的硬件特性,并且基于可扩展标记语言(EXtens i b l eMarkup Language,简称XML)格式生成了外围设备信息和其他硬件设备参数。
[0049] 具体的硬件特征描述文件的层级结构如图4所示,该文件分别从设备级别、外设级别、寄存器级别、字段级别、枚举值级别、供应厂商扩展的角度对硬件层包含的微控制器进行描述。其中,设备级别可以包括微控制器的名称、说明或版本。由于微控制器包含至少一个寄存器,且外设是寄存器的命名集合,所以可以从外设级别对微控制器进一步描述,即为微控制器包含的所有寄存器分配相应的地址块,以描述各个寄存器的位置。再从寄存器级别进一步对微控制器包含的至少一个寄存器的类型进行描述。并且由于寄存器可以由一个或多个字段组成,所以可以进一步划分到字段级别,即将寄存器划分为具有不同功能的位块。其中,字段的值范围又可以用枚举值进一步描述,因此,通过枚举值级别可以选择性地映射到说明字符串,以增强源代码的可读性。另外,还可以通过供应商扩展对当前描述的微控制器进行创新和扩展。
[0050] 基于第一抽象层抽象出的第一接口,硬件抽象层中的第二抽象层可以获取硬件配置中的寄存器功能类型,然后按照寄存器的功能类型进一步抽象,以得到第二接口。其中,第二接口用于描述硬件层中寄存器的功能类型。则对第二接口的封装可以认为是基于第一接口中包含的每位寄存器的硬件配置,对每位寄存器的硬件配置进行功能分类。其中,寄存器的功能类型还能够表明寄存器提供该功能的具体工作方式。不同功能类型的寄存器可以将包括定时寄存器、计数寄存器、寻址存器以及指令指针寄存器等等。
[0051] 对于寄存器功能类型的获取,可选地,第二抽象层可以借助位于第一抽象层与第二抽象层之间的中间层,即第二抽象层通过调用中间层,获取第一接口描述的硬件配置,并按照此硬件配置进行进一步封装,以得到第二接口。
[0052] 基于第二抽象层抽象出的第二接口,硬件抽象层中的第三抽象层进一步按照根据寄存器的工作方式封装出第三接口。其中,第三抽象层通常为板级支持包(Board Support Package,简称BSP)。举例来说,假设第二接口描述的是的寄存器功能类型为计时,表明硬件层微控制器设置有定时寄存器并且定时寄存器具体又可以包括具有不同的定时方式寄存器,比如接通延时型定时器,断开延时型定时器以及脉冲型定时器。则第三抽象层可以按照定时寄存器的工作方式进一步抽象出第三接口,第三接口用于描述上述各种定时器的工作方式,也即是从更高层次的角度抽象出硬件层的硬件特性。
[0053] 本实施例中,嵌入式系统的硬件抽象层具体包括:第一抽象层,第二抽象层,第三抽象层以及位于第一抽象层和第二抽象层之间的中间层。第一抽象层至第三抽象层按照不同程度对硬件层中的寄存器进行抽象,以提供硬件层调用对应的各种接口,以便于操作系统层可以对硬件进行读写等相关操作。
[0054] 可选地,为了保证嵌入式系统中硬件层中各器件的正常工作,图5为本发明实施例提供的又一种嵌入式的结构示意图。在图3所示的基础上,还包括第一驱动层和第二驱动层。
[0055] 第一驱动层用于驱动硬件层中的微控制器;第二驱动层用于驱动硬件层中的外围设备。可选地,两个驱动层均可以采用Rust语言进行编写。
[0056] 具体来说,第一驱动层可以和硬件层包含的微控制器通信连接,并且第一驱动层中配置有适用于多种微控制器的多个驱动程序,其可以统称称为备选驱动程序。则在硬件层中部署有某种控制器时,操作系统可以从备选驱动程序中确定与硬件层包含的微控制器匹配的目标驱动程序,并利用该目标驱动程序驱动硬件层中部署的微控制器。举例来说,假设嵌入式系统的硬件层中部署的微控制器为ARM微控制器,则操作系统层可以从第一驱动层中包含的备选驱动程序,比如ARM微控制器和AVR微控制器各自对应的驱动程序中确定出与ARM微控制器匹配的目标驱动程序,以由第一驱动层驱动硬件层中部署的ARM微控制器。可选地,可以预先将多种微控制器对应的驱动程序编写成备用驱动程序,以支持任意数量的微控制器。
[0057] 第二驱动层可以和硬件层包含的外围设备通信连接,用于驱动与硬件层包含的微控制器连接的外围设备,以便于微控制器的使用者可以直接对外围设备进行读写等操作。
[0058] 本实施例中,在嵌入式系统中,硬件层中的微控制器和外围设备都需要有相应的驱动层程序来支撑。因此,开发者可以预先将不同微控制器的驱动程序编写成备用驱动程序,以便捷地实现微控制器的更换。
[0059] 为便于理解,结合如下场景对以上提供的嵌入式系统的具体实现过程进行示例性说明。下述各种举例也可以结合图5所示的嵌入式系统理解。
[0060] 嵌入式系统可以包括:通用操作系统接口、统一内核接口层、操作系统层、适配层、硬件抽象层以及硬件层。其中,硬件抽象层具体可以包括:第一抽象层、中间层、第二抽象层、第三抽象层、第一驱动层以及第二驱动层。
[0061] 在此嵌入式系统中,利用通用操作系统接口以及适配层,可以实现多种实时内核与多种微控制器之间的适配。具体的适配过程可以从以下几种情况分别进行讨论。一种情况:固定微控制器,将此微控制器与不同类型的实时内核进行适配。即当嵌入式系统中已经部署有ARM微控制器以及FreeRTOS这种类型的内核也部署到嵌入式系统中。此时,当用户对嵌入式系统产生配置指令时,该嵌入式系统的具体工作过程可以描述为:
[0062] 操作系统层可以借助通用操作系统接口获取配置指令对应的配置文件,并将此配置文件写入FreeRTOS中。接着,在操作系统层获取到待写入文件后,可以调用适配层,以确定ARM微控制器对应的目标接口。然后,操作系统层再通过调用此目标接口,将待写入文件写入ARM微控制器中的对应的寄存器。其中,适配层可以表现为函数,以由操作系统调用此函数来确定ARM微控制器对应的目标接口,即实现ARM微控制器与操作系统层之间的传输适配。对于目标接口的具体封装过程可参见上述各实施例中的描述。
[0063] 其中,统一内核接口层可以获取FreeRTOS和RT‑Thread各自支持的操作系统接口,然后对两种不同的实时内核支持的操作系统接口提供的功能进行统一,以得到上述的通用操作系统接口,能够兼容FreeRTOS和RT‑Thread两种实时内核。由于统一内核接口层的上述获取方式,因此,在实际使用中,当用户对上述嵌入式系统中部署的实时内核进行修改,即将FreeRTOS替换为RT‑Thread时,用户可以直接进行实时内核的替换,嵌入式系统中的其他部分无需进行改动,从而实现了实时内核的便捷移植。
[0064] 可见,嵌入式系统通过通用操作系统接口可以兼容操作系统层中部署的多种实时内核,降低了操作系统开发的复杂性,从而提升嵌入式系统移植的效率。
[0065] 另外,在实际中,在实时内核发生替换后,还可以利用适配层完成上述适配,即将适配层作为更换后实时内核进行接口调用的中间媒介。这样也能够降低操作系统开发的复杂性,从而提升嵌入式系统移植的效率。
[0066] 另一种情况,固定实时内核,将此实时内核与不同的微控制器进行适配。即当嵌入式系统中已经部署有FreeRTOS以及ARM这种类型的微控制器也部署到嵌入式系统中。此时,当用户对嵌入式系统产生配置指令时,该嵌入式系统的具体工作过程可以描述为:
[0067] 操作系统层可以借助通用操作系统接口获取配置指令对应的配置文件,并将此配置文件写入FreeRTOS中。其中,通用操作系统接口的生成过程可以参见上述场景实施例中的描述。
[0068] 接着,在操作系统层获取到待写入文件后,可以调用适配层,以确定ARM微控制器对应的目标接口。然后,操作系统层再通过调用此目标接口,将待写入文件写入ARM微控制器中的对应的寄存器。其中,适配层具体可以表现为函数,以由操作系统调用此函数来确定ARM微控制器对应的目标接口,即实现ARM微控制器与操作系统层之间的传输适配。对于目标接口的具体封装过程可参见上述各实施例中的描述。
[0069] 在实际使用中,根据实际需求,用户还可以对上述嵌入式系统中部署的微控制器进行修改,即将ARM微控制器替换为AVR微控制器。由于适配层可以提供硬件层与操作系统层之间的传输适配功能,也即是兼容了不同硬件层中部署的多种微控制器。因此,用户可以直接进行微控制器的替换,嵌入式系统中的其他部分无需进行改动,从而实现了微控制器的便捷移植。
[0070] 此外,在嵌入式系统中,还包括第一驱动层和第二驱动层。第一驱动层可以和硬件层包含的微控制器通信连接,并且第一驱动层中配置有适用于多种微控制器的多个驱动程序,其可以统称称为备选驱动程序。则操作系统层可以从备选驱动程序中包含的备选驱动程序,比如ARM微控制器和AVR微控制器各自对应的驱动程序中确定出与ARM微控制器匹配的目标驱动程序,以由第一驱动层并驱动硬件层中部署的ARM微控制器。即可以预先将多种微控制器对应的驱动程序编写成备选驱动程序,以便于更换微控制器。第二驱动层可以和硬件层包含的外围设备通信连接,用于驱动与硬件层包含的微控制器连接的外围设备,以便于微控制器的使用者可以直接对外围设备进行读写等操作。
[0071] 可见,嵌入式系统通过第一驱动层中包含的多个驱动程序可以兼容不同硬件层中部署的多种微控制器,降低了系统开发的复杂性,从而提升嵌入式系统移植的效率。
[0072] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。