一种基于嵌入式操作系统的软件分层架构的制作方法

文档序号:19905766发布日期:2020-02-11 14:28阅读:642来源:国知局
一种基于嵌入式操作系统的软件分层架构的制作方法

本发明属于计算机软件设计技术领域,涉及一种基于嵌入式操作系统的软件分层架构。



背景技术:

微型处理器的使用一般会采用嵌入式实时操作系统,如μc/os,此操作系统是一款可剪裁的、抢占式的、实时多任务操作系统,具有高度的可移植性,特别适合微处理器和控制器。因此对于常用的stm32,dsp等微处理器都会采用这种操作系统,但在传统的嵌入式软件设计中,上层应用程序、操作系统、底层驱动通常是一并设计开发,没有明显的层次。在新的软件项目中,微小的硬件改动,也要重新开发操作系统软件,设计方法开发效率低,而且没有分层封装,同一资源需要在多个位置重复编写,导致代码繁琐,每一个微小的改动需要同时对多个位置修改,容易出错,逻辑算法驱动与操作系统等融合在一起,致使代码的可维护性差。目前上位机软件开发倡导的低耦合高内聚也同样适用于嵌入式软件,这样可以有效保证软件开发的质量,最大限度地提升软件地开发效率。



技术实现要素:

(一)发明目的

本发明的目的是:针对传统的嵌入式软件设计中代码可移植性、可维护性差,代码繁琐,不易修改等一系列问题,提供一种跨硬件平台的软件分层架构,以节省开发成本,克服背景技术中的问题缺陷。

(二)技术方案

为了解决上述技术问题,本发明提供一种基于嵌入式操作系统的软件分层架构,由下至上依次包括:操作系统移植层、操作系统封装层、硬件驱动层、中间层和应用层;操作系统移值层为整个软件分层提供架构基础,操作系统封装层为硬件驱动层提供底层封装,中间层提供硬件驱动层和应用层的衔接。

其中,所述操作系统移植层包括μc/os操作系统内核文件、cpu内核操作汇编文件、cpu系统操作汇编文件、stm32lib启动文件;cpu内核操作汇编文件包括os_cpu.asm汇编文件,为指定cpu的内核操作;cpu系统操作汇编文件包括os_cpu_a.asm汇编文件,为指定cpu的系统操作;stm32lib启动文件包括启动文件startup.s,为cpu启动文件。

其中,所述操作系统移植层封装成lib库。

其中,所述操作系统封装层采用c++面向对象语言进行操作系统底层处理方法的封装,将任务的操作、消息队列的操作以及互斥信号量的操作封装成类中的成员函数。

其中,所述任务类封装时,任务类的构造函数为初始化任务创建需要的资源,包括任务堆的申请、任务参数的初始化;消息队列类封装时,消息队列类构造函数为消息队列的消息空间内存堆的初始化以及消息队列的创建工作;互斥信号量类封装时,互斥信号量类的构造函数主要对互斥信号量相关参数进行初始化,并进行互斥信号量的创建。

其中,所述硬件驱动层为硬件外设的控制器驱动,针对相同的硬件控制器,将硬件驱动层封装成设备类,直接移植到其它平台使用。

其中,所述硬件驱动层包括串口驱动、can总线驱动、spi总线驱动、sd卡驱动、io驱动。

其中,所述中间层实现系统控制台的功能,在系统启动的main函数中创建一个控制台对象,通过控制台公有成员函数重定向的printf在其他线程实现串口打印;对于控制台接收功能,接口底层将收到的控制台数据通过消息队列传递给控制台线程,控制台遍历链表节点找到对应的指令并通过printf进行交互。

其中,所述应用层为系统的逻辑功能与算法,该层封装后不做任何改变的移植到其他平台直接使用。

其中,所述操作系统移植层、操作系统封装层、硬件驱动层、中间层总封装为一个lib。

(三)有益效果

上述技术方案所提供的基于嵌入式操作系统的软件分层架构,采用面向对象语言编程,最大限度地将不同功能地软件层次区分开,提高软件的模块化操作,使软件开发高效简洁,增加软件的可维护性,减少出错率。

附图说明

图1为一种嵌入式操作系统的软件分层架构框架图。

具体实施方式

为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。

结合图1,本发明基于嵌入式操作系统的软件分层架构实施方式基于μc/os系统开发的一个软件平台,对操作系统内核进行封装,对操作系统提供的消息队列、信号量、任务创建等进行一系列操作进行封装,并加入系统消息打印功能、任务管理功能、传输协议封装等功能,具体实现采用c++语言实现,stm32为硬件平台。

具体地,本实施例基于嵌入式操作系统的软件分层架构由下至上依次包括:操作系统移植层、操作系统封装层、硬件驱动层、中间层和应用层。

(1)操作系统移植层

该层为micrium公司针对具体硬件移植的操作系统,包括处理器的汇编代码的移植,以及堆栈、中断的处理等,这一层属于整个软件设计中的最底层,属于整个系统中最核心的部分,不允许用户直接进行修改,因此将本层放置在整个系统软件框架的最底层,操作系统移值层为整个软件分层提供了架构基础。

该层包括μc/os操作系统内核文件、cpu内核操作汇编文件、cpu系统操作汇编文件、stm32lib启动文件;cpu内核操作汇编文件包括os_cpu.asm汇编文件,用途为指定cpu的内核操作;cpu系统操作汇编文件包括os_cpu_a.asm汇编文件,用途为指定cpu的系统操作;stm32lib启动文件包括启动文件startup.s,为cpu启动文件,整个操作系统移植层封装成lib库。

(2)操作系统封装层

该层为硬件驱动层提供底层封装,这一层通过采用c++面向对象语言进行操作系统底层处理方法的封装,将任务的操作,消息队列的操作以及互斥量的操作封装成类中的成员函数。主要对操作系统功能的封装,操作系统中任务创建、互斥信号量、消息队列创建操作系统函数封装均以类的形式提供,给用户提供最简单实用的入口参数,这一层提供的类需要被应用层的类继承才可以使用。

任务类封装:任务类的构造函数为初始化任务创建需要的资源,包括任务堆的申请,任务参数的初始化。操作系统运行函数(run函数)为任务启动功能函数,核心实现为调用实时操作系统μc/os提供的任务创建函数(ostaskcreate函数)。check成员函数为将该线程加入监测链表,可以动态查询线程的运行情况。

消息队列类封装:消息队列类一般由线程类继承,消息队列类主要是线程间数据传递使用,消息队列类构造函数为消息队列的消息空间内存堆的初始化以及消息队列的创建工作。消息队列封装的发送函数post,功能为发送消息队列数据,消息队列封装的接收函数pend,功能为接收消息队列数据。

互斥信号量类封装:互斥信号量类一般在线程中使用,互斥信号量类的构造函数主要对互斥信号量相关参数进行初始化,并进行互斥信号量的创建。信号量put成员函数,封装osmutexpend等待系统上锁互斥信号量信号量get成员函数,封装osmutextpost为解锁互斥信号量操作。

(3)硬件驱动层

该层为硬件外设的控制器驱动,这需要和硬件直接通信,是硬件系统的驱动,针对相同的硬件控制器,将硬件驱动层封装成设备类,移植到别的平台时不需要修改,可以直接进行使用,硬件驱动层负责系统的硬件管理工作。

该层单独分为一层,将系统常用的硬件驱动,如串口驱动、can总线驱动、spi总线驱动、sd卡驱动、io驱动等。这一层中每种设备都会创建一个类继承设备驱动类(device类),device类有三个类似linux外设操作的虚函数,包括io控制函数ioctrl,io读函数ioread,io写函数iowrite,设备创建设备类的时候需要重写这三个函数,实现具体外设的控制,以及读写寄存器等操作,外设控制类封装号具有较好的跨平台特性。

(4)中间层

该层是一种系统控制台功能,系统堆管理功能,通信协议的组帧与解析,文件读写与log记录功能,以及实现链表类作为基础的数据结构,中间层提供了硬件驱动层和应用层的衔接。

该层实现系统控制台的功能,在系统启动的main函数中创建一个控制台对象。通过控制台公有成员函数重定向的printf可以在其他线程实现串口(或其他外设接口)打印。而对于控制台接收功能,需要接口底层将收到的控制台数据通过消息队列传递给控制台线程,控制台遍历链表节点找到对应的指令并通过printf进行交互。这一层实现也有内存的管理,虽然μc/os提供了内存管理功能,但是为了尽可能精简代码和追求更好的实时性,其内存管理模块根据用户程序要求把动态内存分成多个分区,每一个分区又分成数量和大小固定的内存块,内存块数量和大小在编程时便已确定不可更改,限制了系统的扩展性和灵活性,本设计中内存管理分为大块内存池的申请和释放以及小块内存的申请和释放在一定程度上兼顾了效率和扩展性以及灵活性。实现协议的封装,协议格式为数据头两个字节的头0x550xaa接下来是功能码,数据长度,载荷区,结尾进行crc校验。log记录功能一般存储在sd卡中,通过消息队列循环对sd进行写入操作,存入操作系统运行时的log,在控制台功能失效后提供调试手段。该层基于lwip协议实现tcp的连接与断开重连机制,以及udp的通讯功能。

(5)应用层

该层为系统的逻辑功能与算法,应用层的业务逻辑与算法是整个系统的核心,而且不随硬件的改变而改变,因此这一层封装后可以不做任何改变的移植到其他平台。

除了应用层外,其他各层总封装为一个lib,应用层中实现用户的应用逻辑和算法。

利用上述技术方案,本发明提供了一种较好的嵌入式操作系统的软件分层设计,该设计已经经过了理论论证,并应用于实际软件系统设计。结果表明,该设计可以最大限度地将不同功能地软件层次区分开,提高软件的模块化操作,保证软件开发的高效性。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1