操作系统实验读者写者程序源码_SAST Weekly | STM32F103系列开发板移植华为LiteOS操作系统...

740be5a0e04a09d69266ac1997ee4747.png

SAST weekly 是由电子工程系学生科协推出的科技系列推送,内容涵盖信息领域技术科普、研究前沿热点介绍、科技新闻跟进探索等多个方面,帮助同学们增长姿势,开拓眼界,每周更新,欢迎关注!欢迎愿意分享知识的同学投稿至eesast@mail.tsinghua.edu.cn , 期待你的作品!

    面对大型的嵌入式工程开发,传统的编程方式并不高效。嵌入式操作系统可以帮助开发者进行任务管理,优化程序的整体结构,缩短开发周期,增强系统的实时性。

    电设的小小智能车也可以在开发板上移植嵌入式操作系统,进行任务管理与调度,大大加快我们电设开发的进度。

    目前,嵌入式操作系统FreeRTOS凭借强大稳定的功能和广泛的支持赢得了广大开发者的亲睐。与此同时,国产的嵌入式系统也崭露头角。2015年,华为发布了开源的最轻量级的物联网操作系统LiteOS,为国内的嵌入式开发和开源社区建设增添了浓墨重彩的一笔。

    本文将对华为的LiteOS进行简要的介绍,并带着大家一步一步地将LiteOS移植到电设比赛官方提供的STM32F103RCT6开发板上。希望能给各位的电设比赛提供一些小小的帮助。

01

华为LiteOS简介

    LiteOS是华为针对物联网领域开发的轻量级物联网操作系统,具备轻量级、低功耗、互联互通、组件丰富、快速开发等功能。

3ab7b8b734d98020b09aa4bb579aac82.png

    LiteOS有许多优秀的特性。它的最小内核尺寸仅有6KB,可以快速启动,有着极低的功耗;它包括了端云互通组件,集成了 LwM2M、CoAP、MQTT、mbed TLS、LwIP等全套IoT互联互通协议栈,实现对IoT云平台的快速接入。除此之外,LiteOS还有OpenCPU架构、安全性设计、SOTA远程升级、LiteOS Studio继承开发环境等一系列优秀的特点。

    强大LiteOS操作系统中很小的一部分功能就可以给我们的电设开发带来很大的助力,我们只需要使用到LiteOS中的任务管理功能。话不多说,下面我们一起来把LiteOS移植到手头的开发板上。

02

系统移植

aa990367391fcf2d23cf2acd8389add7.gif

构建裸机工程

d75b48fd360128da1a25452d9adc1289.gif

    打开stm32cubeMX,创建工程文件,配置时钟树。

5d3869c60ba2a76a135ecdbac843d0fc.png

     选择MDK-ARM。生成代码并打开工程。

1abce9a0e488e72fd73db4ed19984f5b.pngaa990367391fcf2d23cf2acd8389add7.gif

系统源码下载

d75b48fd360128da1a25452d9adc1289.gif

    在GitHub中搜索库LiteOS,选择develop分支,下载源码。

309caba28767ecef5c2e932a87b5aaca.pngaa990367391fcf2d23cf2acd8389add7.gif

拷贝代码与配置修改

d75b48fd360128da1a25452d9adc1289.gif

    源码下载完成之后,打开刚刚新建的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

aa990367391fcf2d23cf2acd8389add7.gif

添加头文件并配置路径

d75b48fd360128da1a25452d9adc1289.gif

   将我们需要的系统代码拷贝到工程文件夹之后,我们需要在keil中为工程添加.c源文件并配置头文件的路径,从而在编译过程中将我们要安装的系统一同编译进最终的工程中并下载到开发板上。

    用Keil打开工程文件,首先,在左侧的Project面板中新建分组如下:

Middleware/LiteOS/arch Middleware/LiteOS/kernel Middleware/LiteOS/demos

492242407ced8099638570476c7e5415.png

    在左侧project面板中右键单击工程,进入Manage Project Item界面。

de3c4cc282bd6ca6a5f93a5c1a83b156.png

    选择新建的三个文件夹,点击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。

498e63df5d04ea1c926fb24cb74beaef.png3a9413c3d92da768d503b335a7f46ad2.pngaa990367391fcf2d23cf2acd8389add7.gif

解决冲突

d75b48fd360128da1a25452d9adc1289.gif

   经过以上步骤,LiteOS系统的安装就基本完成了。但此时编译程序会报错。

293805d6676af3085f5aa84353e2e193.png

    这是因为cubeMX在生成代码时定义了PendSV_Handler和Systic Handler,而LiteOS系统中又对其进行了定义造成了重定义的问题。为了解决这个问题,我们在CubeMX中修改两项设置。在NVIC的code generation选项卡中,取消 Pendable request for system service 和 Time base: System tick timer 的Generate IRQ handler。

3d54b17cfbdc5c28a08144e3d102f882.png

03

结语

    经过以上步骤后,编译代码成功,LiteOS就安装成功啦。

    LiteOS与FreeRTOS同属于嵌入式实时操作系统,二者在任务管理上的使用方法很接近。华为LiteOS官方网站上的官方文档中有极其详尽的使用方法,本文就是在参照了官方文档中关于系统移植的很多内容下写成的,感兴趣的读者可以在官网上进行进一步深入的学习。

    中国的科技工作者总是对国产操作系统有着深深的情结,“自主可控”四个字在人们的心中总是有着沉沉的重量。华为LiteOS是国产操作系统中一个优秀的成果,是向技术上自主可控迈出的一大步。

    同时,一个操作系统的成功除了技术还有良好生态的建设,这需要一位位开发者不断支持今天介绍的LiteOS,建成一个良好的生态环境。读者何不动手试一试,在自己的stm32开发板上装上一个LiteOS,也为国产开源操作系统的生态建设出一把力。

编辑|张泰然

审核|刘  洋

5dbcd93db1301e11b0d5799d7cd662d0.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 远程调试spark_spark开启远程调试

一.集群环境配置#调试Master,在master节点的spark-env.sh中添加SPARK_MASTER_OPTS变量export SPARK_MASTER_OPTS"-Xdebug -Xrunjdwp:transportdt_socket,servery,suspendy,address10000"#调试Worker,在worker节点的spark-env.sh中添加SPARK_WO…

web中间件_常见web中间件拿shell

1.weblogic后台页面:(http为7001,https为7002)Google关键字:WebLogic Server AdministrationConsole inurl:console默认的用户名密码1、用户名密码均为:weblogic2、用户名密码均为:system3、用户名密码均为&#xff1a…

java定义抽象类abarea_详解 抽象类

本人在这篇博文中要讲解的知识点,和本人之前的一篇博文有所关联。因为,“抽象类” 是按照 “自下而上” 的顺序来编写所需的类,而在本人之前的博文《详解 继承(上)—— 工具的抽象与分层》中讲到的 继承 则与之相反,按照 “自上而…

word表格图片自动适应表格大小_Excel应用实践20:使用Excel中的数据自动填写Word表格...

学习Excel技术,关注微信公众号:excelperfect我在Excel工作表中存放着数据,如下图1所示。图1我想将这些数据逐行自动输入到Word文档的表格中并分别自动保存,Word文档表格如下图2所示,文档名为“datafromexcel.docx”。图…

dnspod java_使用dnspod遭遇的奇特问题以及背后的原因与临时解决方法

由于园子里有不少用户在使用dnspod,我们觉得有必要将这两天blogjava.net域名在dsnpod遇到的奇特问题分享一下,以免再有人踩着这个坑。12月11日,我们登录到dnspod的后台时,大吃一惊,blogjava.net这个域名竟然消失了。联…

cad转dxf格式文件太大_想知道DWG、DWT、DWS和DXF是什么吗?从了解4种CAD图形格式开始吧...

原创:就说我在开发区常用图形文件格式盘点CAD中的图形文件格式共9种,其扩展名分别为:❶DWG – 图形或块文件❷DWT – 图形样板文件❸DWS – 图形标准文件❹DXF – 图形交换文件(ASCII 或二进制)❺DST – 图形集或图纸集文件(SHEETSET 命令)❻…

vue登录如何存储cookie_vue项目实现表单登录页保存账号和密码到cookie功能

实现功能:1.一周内自动登录勾选时,将账号和密码保存到cookie,下次登陆自动显示到表单内2.点击忘记密码则清空之前保存到cookie的值,下次登陆需要手动输入次要的就不说了直接上主要的代码html部分登陆帮助一周内自动登录忘记密码&a…

usb协议规范_USB连接标准接口简述发布

制程工艺材料类USB为Universal Series Bus (通用序列总线)的缩写,是一种串行通讯协议(sereal protocol),它负责实体层和链接层的建立。它可以支持慢速的数据传输(如鼠标、键盘、游戏摇杆等)也支持快速的数字压缩影音信息。普通的USB2.0版本以下有两对线,分别用来传输…

java urlencode php_PHP如何使用urlencode()函数进行url编码?(代码示例)

urlencode()函数是PHP中的一个内置函数,用于对url进行编码。下面本篇文章就来给大家介绍一些urlencode()函数的用法,让大家了解urlencode()函数是如何对url进行编码的,希望对大家有所帮助。【视频教程推荐:PHP教程】urlencode()函…

光电转换模块_光模块:PIN光电二极管和APD光电二极管

在前面的文章中我们介绍了光模块的基本结构,包括TOSA、ROSA以及BOSA。今天我们接着介绍ROSA光器件的光电探测器。光模块接收端能正确识别信号并完成光电转换,就需要光电探测器,光电探测器通过检测出照射在其上面的光功率,从而并完…

java如何添加自定义的图片_java代码将图片加上自定义水印 -4

java代码将图片加上自定义水印,然后生成了新的图片import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import javax.image…

vba 当前文件名_值得学习和珍藏的VBA常用编程代码语句

分享成果,随喜真能量。大家好,今天继续和大家分享VBA编程中常用的过程代码。过程代码在这里讲解的语句非常简单单一,简单的语句组合起来就是一个复杂的过程,我们要认真掌握这些简单的过程,为我们复杂的工程服务。这也是…

java上传csv错误信息_java处理csv文件上传示例详解

前言:示例只是做了一个最最基础的上传csv的示例,如果要引用到代码中去,还需要根据自己的业务自行添加一些逻辑处理。ReadCsvUtil工具类package com.hanfengyeqiao.gjb.utils;import java.io.*;import java.util.*;/*** csv工具类*/public cla…

暗金色 rgb_杜伽TAURUS K310樱桃RGB红轴体验:做工精良、手感优秀

前言DURGOD杜伽的机械键盘一直以简约的外形和优秀的手感而备受好评。笔者之前用过杜伽的K310、K320两个系列的多把键盘,对其非常熟悉,外形简约大方,手感、灯效也比较满意。正因如此,这次刚刚入手了一把杜伽K310 RGB樱桃红轴&#…

vim 显示行号_Vim给文件加行号,这通惊为天人的操作没sei了!文末天书慎点

引言一般 Vim 使用 :set number 命令,在编辑器显示行号。本文展示了如何将行号插入到正文中,或者只插入到段落中。此外,还提供了打印行号的选项(Vim 可以打印带有数字的行,并且不需要文件有数字)。Vim可以使用 :s 命令在每行之前插…

java 获取对象方法有哪些方法有哪些方法有哪些_Java中创建String 对象的方法有哪些...

Java中创建String 对象的方法有哪些发布时间:2020-11-25 16:45:30来源:亿速云阅读:71作者:Leah这篇文章将为大家详细讲解有关Java中创建String 对象的方法有哪些,文章内容质量较高,因此小编分享给大家做个参…

vb中怎么使图片适应框的大小_叮!VB考前练习了解一下?

1、Visual Basic窗体设计器的主要功能是(C )。A) 画图B) 编写源程序代码C) 建立用户界面D) 显示文字解析:Visual Basic窗体设计器简称窗体(Form),是应用程序最终面向用户的窗口,它对应于应用程序的运行结果。各种图形、图像、数据等都是…

苹果切换输入法_日语输入法哪个好

在初学日语的时候经常会遇到一些不认识的词,想查一下这个词是什么意思,应该怎么输入呢?尝试过许多软件之后,テツ为大家总结了一些认为比较好用的输入法百度IME输入法。下载安装后的切换非常简单,在右下角输入法处切换至JP日语即可…

python 10个100以内随机整数编辑_你要偷偷的学Python,然后惊呆所有人(第五天) - python阿喵

标题无意冒犯,就是觉得这个广告挺好玩的前言前期回顾:你要偷偷学Python,然后惊呆所有人(第四天)在第四天的时候,我们接触了Python的模块调用,这也是Python能够火起来的一大优势。我们还实践了csv模块。不过冷静下来想想…

安卓开发怎么调用photopicker_谷歌出手整顿安卓应用程序乱象:无良权限的APP们再见了!...

相信你在使用安卓手机的时候一定有过这样的经历,在明确拒绝了软件调用电话、手机通讯录、短信等敏感内容的访问权后,APP表示无法继续运行然后强退。如果这款APP不具备可替代性,恐怕最终结果是,用户不得不选择妥协。关于应用程序度…