操作系统实验读者写者程序源码_SAST Weekly | STM32F103系列开发板移植华为LiteOS操作系统...
SAST weekly 是由電子工程系學(xué)生科協(xié)推出的科技系列推送,內(nèi)容涵蓋信息領(lǐng)域技術(shù)科普、研究前沿?zé)狳c(diǎn)介紹、科技新聞跟進(jìn)探索等多個(gè)方面,幫助同學(xué)們?cè)鲩L(zhǎng)姿勢(shì),開(kāi)拓眼界,每周更新,歡迎關(guān)注!歡迎愿意分享知識(shí)的同學(xué)投稿至eesast@mail.tsinghua.edu.cn , 期待你的作品!
????面對(duì)大型的嵌入式工程開(kāi)發(fā),傳統(tǒng)的編程方式并不高效。嵌入式操作系統(tǒng)可以幫助開(kāi)發(fā)者進(jìn)行任務(wù)管理,優(yōu)化程序的整體結(jié)構(gòu),縮短開(kāi)發(fā)周期,增強(qiáng)系統(tǒng)的實(shí)時(shí)性。
????電設(shè)的小小智能車(chē)也可以在開(kāi)發(fā)板上移植嵌入式操作系統(tǒng),進(jìn)行任務(wù)管理與調(diào)度,大大加快我們電設(shè)開(kāi)發(fā)的進(jìn)度。
? ? 目前,嵌入式操作系統(tǒng)FreeRTOS憑借強(qiáng)大穩(wěn)定的功能和廣泛的支持贏得了廣大開(kāi)發(fā)者的親睞。與此同時(shí),國(guó)產(chǎn)的嵌入式系統(tǒng)也嶄露頭角。2015年,華為發(fā)布了開(kāi)源的最輕量級(jí)的物聯(lián)網(wǎng)操作系統(tǒng)LiteOS,為國(guó)內(nèi)的嵌入式開(kāi)發(fā)和開(kāi)源社區(qū)建設(shè)增添了濃墨重彩的一筆。
????本文將對(duì)華為的LiteOS進(jìn)行簡(jiǎn)要的介紹,并帶著大家一步一步地將LiteOS移植到電設(shè)比賽官方提供的STM32F103RCT6開(kāi)發(fā)板上。希望能給各位的電設(shè)比賽提供一些小小的幫助。
01
華為L(zhǎng)iteOS簡(jiǎn)介
??? LiteOS是華為針對(duì)物聯(lián)網(wǎng)領(lǐng)域開(kāi)發(fā)的輕量級(jí)物聯(lián)網(wǎng)操作系統(tǒng),具備輕量級(jí)、低功耗、互聯(lián)互通、組件豐富、快速開(kāi)發(fā)等功能。
??? LiteOS有許多優(yōu)秀的特性。它的最小內(nèi)核尺寸僅有6KB,可以快速啟動(dòng),有著極低的功耗;它包括了端云互通組件,集成了 LwM2M、CoAP、MQTT、mbed TLS、LwIP等全套IoT互聯(lián)互通協(xié)議棧,實(shí)現(xiàn)對(duì)IoT云平臺(tái)的快速接入。除此之外,LiteOS還有OpenCPU架構(gòu)、安全性設(shè)計(jì)、SOTA遠(yuǎn)程升級(jí)、LiteOS Studio繼承開(kāi)發(fā)環(huán)境等一系列優(yōu)秀的特點(diǎn)。
????強(qiáng)大LiteOS操作系統(tǒng)中很小的一部分功能就可以給我們的電設(shè)開(kāi)發(fā)帶來(lái)很大的助力,我們只需要使用到LiteOS中的任務(wù)管理功能。話(huà)不多說(shuō),下面我們一起來(lái)把LiteOS移植到手頭的開(kāi)發(fā)板上。
02
系統(tǒng)移植
構(gòu)建裸機(jī)工程
????打開(kāi)stm32cubeMX,創(chuàng)建工程文件,配置時(shí)鐘樹(shù)。
?????選擇MDK-ARM。生成代碼并打開(kāi)工程。
系統(tǒng)源碼下載
????在GitHub中搜索庫(kù)LiteOS,選擇develop分支,下載源碼。
拷貝代碼與配置修改
????源碼下載完成之后,打開(kāi)剛剛新建的stm32工程所在的文件夾,新建一系列目錄用來(lái)存放系統(tǒng)源碼。新建目錄如下
-Middlewares
????-LiteOS
????????-arch
????????-demos
????????-kernel
????打開(kāi)上一步驟中下載的系統(tǒng)源碼,將demo arch kernel三個(gè)目錄下的所有內(nèi)容拷貝到剛剛建成的目錄中。
????拷貝系統(tǒng)源碼后,整個(gè)工程還需要一些配置代碼,我們可以使用官方提供的移植示例。將LiteOS- develop\ LiteOS-develop\targets\ STM32F103VET6_NB_GCC目錄下的OS_CONFIG文件夾拷貝到工程文件夾中。這個(gè)示例針對(duì)的開(kāi)發(fā)板是STM32F103VET6,而華為并沒(méi)有對(duì)電設(shè)提供的STM32F103RCT6開(kāi)發(fā)板進(jìn)行官方的適配,因此我們需要對(duì)系統(tǒng)配置進(jìn)行一些小修改。
????打開(kāi)OS_CONFIG文件夾下的文件target_config.h,在LiteOS移植過(guò)程中,這個(gè)文件有一下三處需要進(jìn)行配置。
????首先修改MCU頭文件,我們使用的是F103系列芯片,對(duì)應(yīng)的頭文件是stm32f1xx.h,這里我們不需要進(jìn)行修改。同學(xué)們?nèi)蘸笕绻褂貌煌吞?hào)的開(kāi)發(fā)板需要配置不同的MCU驅(qū)動(dòng)頭文件。
#include?"los_typedef.h"
#include?"stm32f1xx.h"
#include?
#include?
????其次是根據(jù)不同芯片修改RAM大小的配置。STM32F103RCT6的SRAM大小是48KB,因此需要對(duì)代碼進(jìn)行如下修改。
#define BOARD_SRAM_SIZE_KB? ? ? ?48
????最后,我們需要對(duì)系統(tǒng)是否接管中斷進(jìn)行配置。非接管中斷方式配置起來(lái)比較方便,而且stm32本身的中斷功能已經(jīng)很完善了,因此我們選擇非接管中斷方式,將 LOSCFG_PLATFORM_HWI設(shè)置為NO。
#define?LOSCFG_PLATFORM_HWI NO
添加頭文件并配置路徑
? ?將我們需要的系統(tǒng)代碼拷貝到工程文件夾之后,我們需要在keil中為工程添加.c源文件并配置頭文件的路徑,從而在編譯過(guò)程中將我們要安裝的系統(tǒng)一同編譯進(jìn)最終的工程中并下載到開(kāi)發(fā)板上。
????用Keil打開(kāi)工程文件,首先,在左側(cè)的Project面板中新建分組如下:
Middleware/LiteOS/arch Middleware/LiteOS/kernel Middleware/LiteOS/demos
????在左側(cè)project面板中右鍵單擊工程,進(jìn)入Manage Project Item界面。
? ? 選擇新建的三個(gè)文件夾,點(diǎn)擊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
????最后,配置頭文件路徑,打開(kāi)keil設(shè)置界面中的C/C++選項(xiàng)卡,設(shè)置include paths。
解決沖突
? ?經(jīng)過(guò)以上步驟,LiteOS系統(tǒng)的安裝就基本完成了。但此時(shí)編譯程序會(huì)報(bào)錯(cuò)。
? ? 這是因?yàn)閏ubeMX在生成代碼時(shí)定義了PendSV_Handler和Systic Handler,而LiteOS系統(tǒng)中又對(duì)其進(jìn)行了定義造成了重定義的問(wèn)題。為了解決這個(gè)問(wèn)題,我們?cè)贑ubeMX中修改兩項(xiàng)設(shè)置。在NVIC的code generation選項(xiàng)卡中,取消?Pendable request for system service 和?Time base: System tick timer 的Generate IRQ handler。
03
結(jié)語(yǔ)
? ? 經(jīng)過(guò)以上步驟后,編譯代碼成功,LiteOS就安裝成功啦。
??? LiteOS與FreeRTOS同屬于嵌入式實(shí)時(shí)操作系統(tǒng),二者在任務(wù)管理上的使用方法很接近。華為L(zhǎng)iteOS官方網(wǎng)站上的官方文檔中有極其詳盡的使用方法,本文就是在參照了官方文檔中關(guān)于系統(tǒng)移植的很多內(nèi)容下寫(xiě)成的,感興趣的讀者可以在官網(wǎng)上進(jìn)行進(jìn)一步深入的學(xué)習(xí)。
????中國(guó)的科技工作者總是對(duì)國(guó)產(chǎn)操作系統(tǒng)有著深深的情結(jié),“自主可控”四個(gè)字在人們的心中總是有著沉沉的重量。華為L(zhǎng)iteOS是國(guó)產(chǎn)操作系統(tǒng)中一個(gè)優(yōu)秀的成果,是向技術(shù)上自主可控邁出的一大步。
????同時(shí),一個(gè)操作系統(tǒng)的成功除了技術(shù)還有良好生態(tài)的建設(shè),這需要一位位開(kāi)發(fā)者不斷支持今天介紹的LiteOS,建成一個(gè)良好的生態(tài)環(huán)境。讀者何不動(dòng)手試一試,在自己的stm32開(kāi)發(fā)板上裝上一個(gè)LiteOS,也為國(guó)產(chǎn)開(kāi)源操作系統(tǒng)的生態(tài)建設(shè)出一把力。
編輯|張?zhí)┤?/p>
審核|劉? 洋
總結(jié)
以上是生活随笔為你收集整理的操作系统实验读者写者程序源码_SAST Weekly | STM32F103系列开发板移植华为LiteOS操作系统...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python是谁维护的_Python是维
- 下一篇: 如何看懂串口通讯协议_一文看懂PLC的通