SAST weekly 是由电子工程系学生科协推出的科技系列推送,内容涵盖信息领域技术科普、研究前沿热点介绍、科技新闻跟进探索等多个方面,帮助同学们增长姿势,开拓眼界,每周更新,欢迎关注!欢迎愿意分享知识的同学投稿至eesast@mail.tsinghua.edu.cn , 期待你的作品!
面对大型的嵌入式工程开发,传统的编程方式并不高效。嵌入式操作系统可以帮助开发者进行任务管理,优化程序的整体结构,缩短开发周期,增强系统的实时性。
电设的小小智能车也可以在开发板上移植嵌入式操作系统,进行任务管理与调度,大大加快我们电设开发的进度。
目前,嵌入式操作系统FreeRTOS凭借强大稳定的功能和广泛的支持赢得了广大开发者的亲睐。与此同时,国产的嵌入式系统也崭露头角。2015年,华为发布了开源的最轻量级的物联网操作系统LiteOS,为国内的嵌入式开发和开源社区建设增添了浓墨重彩的一笔。
本文将对华为的LiteOS进行简要的介绍,并带着大家一步一步地将LiteOS移植到电设比赛官方提供的STM32F103RCT6开发板上。希望能给各位的电设比赛提供一些小小的帮助。
01
华为LiteOS简介
LiteOS是华为针对物联网领域开发的轻量级物联网操作系统,具备轻量级、低功耗、互联互通、组件丰富、快速开发等功能。
LiteOS有许多优秀的特性。它的最小内核尺寸仅有6KB,可以快速启动,有着极低的功耗;它包括了端云互通组件,集成了 LwM2M、CoAP、MQTT、mbed TLS、LwIP等全套IoT互联互通协议栈,实现对IoT云平台的快速接入。除此之外,LiteOS还有OpenCPU架构、安全性设计、SOTA远程升级、LiteOS Studio继承开发环境等一系列优秀的特点。
强大LiteOS操作系统中很小的一部分功能就可以给我们的电设开发带来很大的助力,我们只需要使用到LiteOS中的任务管理功能。话不多说,下面我们一起来把LiteOS移植到手头的开发板上。
02
系统移植
构建裸机工程
打开stm32cubeMX,创建工程文件,配置时钟树。
选择MDK-ARM。生成代码并打开工程。
系统源码下载
在GitHub中搜索库LiteOS,选择develop分支,下载源码。
拷贝代码与配置修改
源码下载完成之后,打开刚刚新建的stm32工程所在的文件夹,新建一系列目录用来存放系统源码。新建目录如下
-Middlewares
-LiteOS
-arch
-demos
-kernel
打开上一步骤中下载的系统源码,将demo arch kernel三个目录下的所有内容拷贝到刚刚建成的目录中。
拷贝系统源码后,整个工程还需要一些配置代码,我们可以使用官方提供的移植示例。将LiteOS- develop\ LiteOS-develop\targets\ STM32F103VET6_NB_GCC目录下的OS_CONFIG文件夹拷贝到工程文件夹中。这个示例针对的开发板是STM32F103VET6,而华为并没有对电设提供的STM32F103RCT6开发板进行官方的适配,因此我们需要对系统配置进行一些小修改。
打开OS_CONFIG文件夹下的文件target_config.h,在LiteOS移植过程中,这个文件有一下三处需要进行配置。
首先修改MCU头文件,我们使用的是F103系列芯片,对应的头文件是stm32f1xx.h,这里我们不需要进行修改。同学们日后如果使用不同型号的开发板需要配置不同的MCU驱动头文件。
#include "los_typedef.h"
#include "stm32f1xx.h"
#include
#include
其次是根据不同芯片修改RAM大小的配置。STM32F103RCT6的SRAM大小是48KB,因此需要对代码进行如下修改。
#define BOARD_SRAM_SIZE_KB 48
最后,我们需要对系统是否接管中断进行配置。非接管中断方式配置起来比较方便,而且stm32本身的中断功能已经很完善了,因此我们选择非接管中断方式,将 LOSCFG_PLATFORM_HWI设置为NO。
#define LOSCFG_PLATFORM_HWI NO
添加头文件并配置路径
将我们需要的系统代码拷贝到工程文件夹之后,我们需要在keil中为工程添加.c源文件并配置头文件的路径,从而在编译过程中将我们要安装的系统一同编译进最终的工程中并下载到开发板上。
用Keil打开工程文件,首先,在左侧的Project面板中新建分组如下:
Middleware/LiteOS/arch Middleware/LiteOS/kernel Middleware/LiteOS/demos
在左侧project面板中右键单击工程,进入Manage Project Item界面。
选择新建的三个文件夹,点击Add Files添加LiteOS代码文件。在middleware/LiteOS/arch分组中,添加以下文件:
arch\arm\arm-m\src
目录下的全部文件
los_hw.c
los_hw_tick.c
los_hwi.c
arch\arm\arm-m\cortex-m3\keil
目录下的:
los_dispatch_keil.S
在middleware/LiteOS/kernel分组中,添加以下文件:
kernel\base\core
下面全部 .c 文件
kernel\base\ipc
下面全部 .c 文件
kernel\base\mem\bestfit_little
下面全部 .c 文件
kernel\base\mem\common
下面全部 .c 文件
kernel\base\mem\membox
下面全部 .c 文件
kernel\base\misc
下面全部 .c 文件
kernel\base\om
下面全部 .c 文件
kernel\extended\tickless
下面全部 .c 文件
kernel 下面的 los_init.c
最后,配置头文件路径,打开keil设置界面中的C/C++选项卡,设置include paths。
解决冲突
经过以上步骤,LiteOS系统的安装就基本完成了。但此时编译程序会报错。
这是因为cubeMX在生成代码时定义了PendSV_Handler和Systic Handler,而LiteOS系统中又对其进行了定义造成了重定义的问题。为了解决这个问题,我们在CubeMX中修改两项设置。在NVIC的code generation选项卡中,取消 Pendable request for system service 和 Time base: System tick timer 的Generate IRQ handler。
03
结语
经过以上步骤后,编译代码成功,LiteOS就安装成功啦。
LiteOS与FreeRTOS同属于嵌入式实时操作系统,二者在任务管理上的使用方法很接近。华为LiteOS官方网站上的官方文档中有极其详尽的使用方法,本文就是在参照了官方文档中关于系统移植的很多内容下写成的,感兴趣的读者可以在官网上进行进一步深入的学习。
中国的科技工作者总是对国产操作系统有着深深的情结,“自主可控”四个字在人们的心中总是有着沉沉的重量。华为LiteOS是国产操作系统中一个优秀的成果,是向技术上自主可控迈出的一大步。
同时,一个操作系统的成功除了技术还有良好生态的建设,这需要一位位开发者不断支持今天介绍的LiteOS,建成一个良好的生态环境。读者何不动手试一试,在自己的stm32开发板上装上一个LiteOS,也为国产开源操作系统的生态建设出一把力。
编辑|张泰然
审核|刘 洋