Huawei LiteOS是華為面向IoT領域,構建的“統(tǒng)一物聯(lián)網(wǎng)操作系統(tǒng)和中間件軟件平臺”,以輕量級(內(nèi)核小于10k)、低功耗(1節(jié)5號電池最多可以工作5年),快速啟動,互聯(lián)互通,安全等關鍵能力,為開發(fā)者提供“一站式”完整軟件平臺,有效降低開發(fā)門檻、縮短開發(fā)周期。
Huawei LiteOS五大內(nèi)核模塊
下面對LiteOS基礎內(nèi)核的任務管理、內(nèi)存管理、中斷管理、信號量、互斥鎖五大模塊進行簡單介紹。
01、LiteOS內(nèi)核的任務管理
任務是競爭系統(tǒng)資源的最小運行單元。任務可以使用或等待CPU、使用內(nèi)存空間等系統(tǒng)資源,并獨立于其它任務運行。
Huawei LiteOS是一個支持多任務的操作系統(tǒng),一個任務就表示一個線程,任務之間可以進行切換和通信。LiteOS的任務管理模塊提供任務創(chuàng)建、刪除、延時、掛起和恢復、更改任務優(yōu)先級、鎖定任務調度和解鎖任務調度、根據(jù)任務控制塊查詢?nèi)蝿?ID、根據(jù) ID 查詢?nèi)蝿湛刂茐K信息等功能。
因為LiteOS內(nèi)核是搶占式調度內(nèi)核,所以高優(yōu)先級的任務可以打斷低優(yōu)先級任務,低優(yōu)先級任務必須在高優(yōu)先級任務阻塞或結束后才能得到調度,同優(yōu)先級任務會進行時間片輪轉調度。優(yōu)先級表示任務執(zhí)行的優(yōu)先順序,決定了在發(fā)生任務切換時即將要執(zhí)行的任務。LiteOS中的任務一共有32個優(yōu)先級 (0-31),最高優(yōu)先級為 0,最低優(yōu)先級為31。
任務控制TCB
每一個任務都含有一個任務控制塊(TCB)。TCB 包含了任務上下文棧指針(stack pointer)、任務狀態(tài)(包括就緒、運行、阻塞、退出4種狀態(tài))、任務棧大小(任務棧里保存著局部變量、寄存器、函數(shù)參數(shù)、函數(shù)返回地址等)、任務優(yōu)先級、任務ID、任務名等信息。TCB相當于每個任務在內(nèi)核中的身份證,可以反映出每個任務運行情況。
運作機制
在任務模塊初始化時,系統(tǒng)會先申請TCB需要的內(nèi)存空間。如果任務初始化成功,則系統(tǒng)對TCB內(nèi)容進行初始化。用戶創(chuàng)建任務時,系統(tǒng)會將任務棧進行初始化,預置上下文。此外,系統(tǒng)還會將“任務入口函數(shù)”地址放在相應位置。這樣在任務第一次啟動進入運行態(tài)時,將會執(zhí)行“任務入口函數(shù)”。
02、LiteOS內(nèi)核的內(nèi)存管理
Huawei LiteOS的內(nèi)存管理模塊管理系統(tǒng)的內(nèi)存資源,主要包括內(nèi)存的初始化、分配及釋放,是操作系統(tǒng)的核心模塊之一。在系統(tǒng)運行過程中,內(nèi)存管理模塊通過對內(nèi)存的申請/釋放操作,來管理用戶和OS對內(nèi)存的使用,使內(nèi)存的利用率和使用效率達到最優(yōu),同時最大限度地解決系統(tǒng)的內(nèi)存碎片問題。
Huawei LiteOS的內(nèi)存管理分為動態(tài)內(nèi)存管理和靜態(tài)內(nèi)存管理。
動態(tài)內(nèi)存管理
在動態(tài)內(nèi)存池中分配用戶指定大小的內(nèi)存塊。
o 優(yōu)點:按需分配。
o 缺點:內(nèi)存池中可能出現(xiàn)碎片。
靜態(tài)內(nèi)存管理
在靜態(tài)內(nèi)存池中分配用戶初始化時預設(固定)大小的內(nèi)存塊,初始化后塊大小不可變更。
o 優(yōu)點:分配和釋放效率高,靜態(tài)內(nèi)存池中無碎片。
o 缺點:只能申請到初始化預設大小的內(nèi)存塊,不能按需申請。
03、LiteOS內(nèi)核的中斷管理
中斷是指出現(xiàn)需要時,CPU暫停執(zhí)行當前程序,轉而執(zhí)行新程序的過程。即在程序運行過程中,系統(tǒng)出現(xiàn)了一個必須由CPU立即處理的事務。此時,CPU暫時中止當前程序的執(zhí)行轉而處理這個事務,這個過程就叫做中斷。
為什么需要中斷?
眾多周知,CPU的處理速度比外設的運行速度快很多,外設可以在沒有CPU介入的情況下完成一定的工作,但某些情況下需要CPU為其做一定的工作。通過中斷機制,在外設不需要CPU介入時,CPU可以執(zhí)行其它任務,而當外設需要CPU時通過產(chǎn)生中斷信號使CPU立即中斷當前任務來響應中斷請求。用戶通過中斷申請,注冊中斷處理程序,可以指定CPU響應中斷請求時所執(zhí)行的具體操作。這樣可以使CPU避免把大量時間耗費在等待、查詢外設狀態(tài)的操作上,因此將大大提高系統(tǒng)實時性以及執(zhí)行效率。
相關的硬件
與中斷相關的硬件可以劃分為三類:設備、中斷控制器、CPU本身。
設備:發(fā)起中斷的源,當設備需要請求CPU時,產(chǎn)生一個中斷信號,該信號連接至中斷控制器。
中斷控制器:中斷控制器是 CPU 眾多外設中的一個,它一方面接收其它外設中斷引腳的輸入,另一方面,它會發(fā)出中斷信號給CPU??梢酝ㄟ^對中斷控制器編程實現(xiàn)對中斷源的優(yōu)先級、觸發(fā)方式、打開和關閉源等設置操作。常用的中斷控制器有VIC(Vector Interrupt Controller)和GIC(General Interrupt Controller),在 ARM Cortex-M 系列中使用的中斷控制器是NVIC(Nested Vector Interrupt Controller)。
CPU:CPU會響應中斷源的請求,中斷當前正在執(zhí)行的任務,轉而執(zhí)行中斷處理程序。
主要功能
Huawei LiteOS支持:中斷初始化、中斷創(chuàng)建、開/關中斷、恢復中斷、中斷使能、中斷屏蔽。
04、LiteOS內(nèi)核的信號量
信號量(Semaphore)是一種實現(xiàn)任務間通信的機制,可以用于任務之間同步或臨界資源的互斥訪問。信號量可以被任務獲取或者申請,不同的信號量通過信號量索引號來唯一確定,每個信號量都有一個計數(shù)值和任務隊列。通常信號量的計數(shù)值表示有效的資源數(shù),即剩下的可被占用的互斥資源數(shù)。當任務申請(Pend)信號量時,如果申請成功,則信號量的計數(shù)值遞減,如申請失敗,則掛起在該信號量的等待任務隊列上,一旦有任務釋放該信號量,則等待任務隊列中的任務被喚醒開始執(zhí)行。
信號量運作示意圖:
使用場景
信號量是一種非常靈活的同步方式,可以運用在多種場合中,實現(xiàn)鎖、同步、資源計數(shù)等功能,也能方便的用于任務與任務,中斷與任務的同步中。
· 任務間互斥。用作互斥時,信號量創(chuàng)建后記數(shù)是滿的,在需要使用臨界資源時,先申請信號量,使其變空,這樣其他任務需要使用臨界資源時就會因為無法申請到信號量而阻塞,從而保證了臨界資源的安全。
· 任務間同步。用作同步時,信號量在創(chuàng)建后被置為空,任務1申請信號量而阻塞,任務2在某種條件發(fā)生后,釋放信號量,于是任務1得以進入READY或RUNNING態(tài),從而達到了兩個任務間的同步。
· 資源計數(shù)。用作資源計數(shù)時,信號量的作用是一個特殊的計數(shù)器,可以遞增或者遞減,但是值永遠不能為負值,典型的應用場景是生產(chǎn)者與消費者的場景。
· 中斷與任務的同步。用作中斷與任務的同步時,可以在中斷未觸發(fā)時將信號量的值置為0,從而堵塞中斷服務處理任務,一旦中斷被觸發(fā),則喚醒堵塞的中斷服務處理任務進行中斷處理。
05、LiteOS內(nèi)核的互斥鎖
互斥鎖(mutex)又稱互斥型信號量,是一種特殊的二值信號量,用于實現(xiàn)對共享資源的獨占式處理。互斥鎖主要使用在多任務環(huán)境下,此時往往存在多個任務競爭同一共享資源的應用場景。另外,Huawei LiteOS通過優(yōu)先級繼承算法,解決了信號量存在的優(yōu)先級翻轉問題。
運作機制
任意時刻互斥鎖只有兩種狀態(tài):開鎖或閉鎖。當有任務持有時,互斥鎖處于閉鎖狀態(tài),這個任務獲得該互斥鎖的所有權。當該任務釋放它時,該互斥鎖被開鎖,任務失去該互斥鎖的所有權。當一個任務持有互斥鎖時,其他任務將不能再對該互斥鎖進行開鎖或持有,所以其他任務此時訪問這個公共資源將會被阻塞,直到互斥鎖被持有該鎖的任務釋放后,其他任務才能重新訪問該公共資源。
互斥鎖運作示意圖:
圖解LiteOS開發(fā)環(huán)境快速搭建
下面介紹如何在Windows上搭建 LiteOS 的開發(fā)調試環(huán)境?;诘挠布脚_采用的是華為官方推薦的IoT開發(fā)板——小熊派(BearPi)。下面將首先介紹開發(fā)板與 Windows連接所需的驅動安裝,再介紹用于開發(fā)LiteOS系統(tǒng)級別軟件的集成開發(fā)環(huán)境(IDE)。LiteOS開發(fā)可以使用兩種IDE開發(fā)環(huán)境,分別是華為提供的LiteOS Studio和Keil公司提供的MDK。主要介紹華為目前自研主推的LiteOS Studio,并通過一個簡單的用例演示如何使用LiteOS Studio創(chuàng)建一個工程,并對其進行編譯、燒錄和設備在線調試的具體操作步驟。
1、準備環(huán)境
1.1 小熊派(BearPi)介紹
小熊派(BearPi)是一款基于STM32L431RCT6設計的高性能物聯(lián)網(wǎng)開發(fā)板。具有強大的可擴展性,提供給開發(fā)者評估及快速設計相關物聯(lián)網(wǎng)的應用產(chǎn)品。下圖展示了BearPi核心板的構成:
圖 1 - BearPi 的核心板
出于演示多種物聯(lián)網(wǎng)解決方案的目的,以及擴展性的需要,整個BearPi套件除了核心板外還提供有多款外擴擴展板插件,整體上這些外擴插件板分為兩大類:
一類擴展板上集成了多種 “傳感(Sensor)” 設備和 “動作(Actuator)” 設備,“Sensor” 的主要職能是負責從周邊環(huán)境中采集信息并由MCU(圖 2 中標號為 “2” 的黃色線框部分)進行讀取,譬如溫度傳感器可以采集周邊環(huán)境的溫度值、光照傳感器可以采集周邊環(huán)境的光照值等等;而 “Actuator” 則指的是一些可以接受控制指令進行動作的元器件,譬如馬達用于執(zhí)行旋轉功能、燈泡可以發(fā)光,蜂鳴器可以發(fā)出聲音等等。這些 “Sensor” 和 “Acurator” 根據(jù)不同的應用場景組合后集成在一系列的擴展板上,可以通過標準的插口以插件的形式和 BearPi 的核心板進行連接。參考圖2中標號為1的紅色線框部分。
另一類擴展板上集成了各種通訊芯片和射頻單元,譬如NB-IoT發(fā)射單元、Wi-Fi 發(fā)射單元等,這些擴展板主要負責在MCU的控制下實現(xiàn)網(wǎng)絡連接,實現(xiàn)BearPi 和網(wǎng)絡云端設備的互聯(lián)互通。這些負責網(wǎng)絡通訊的擴展板同樣通過標準的插口以插件的形式連接在BearPi的核心板上。參考圖2中標號為“3” 的綠色線框部分。
圖 2 - BearPi 的三大組成部分
1.2 安裝驅動
BearPi 開發(fā)板通過Micro USB線與PC連接,所以在具體開發(fā)調試前首先要在PC上為開發(fā)板安裝USB驅動。BearPi 已經(jīng)提供了配套的驅動和 LiteOS Studio 安裝包,不做特殊說明,以下安裝包采用的都是 BearPi 套件自帶的版本。
驅動的安裝比較簡單,解壓 “小熊派開發(fā)板資料1軟件資料” 目錄下的 “STLINK驅動.zip” 壓縮包,雙擊與自己系統(tǒng)對應的安裝程序即可, 如圖3所示,32位系統(tǒng)選擇 X86 安裝程序,64位系統(tǒng)選擇64位安裝程序,并根據(jù)安裝程序提示安裝驅動(也可以直接運行stlink_winusb_install.bat這個批處理安裝腳本文件)。要注意的是,由于后面安裝的LiteOS Studio軟件包只支持64位的版本,所以建議大家開發(fā)調試時使用Windows 7版本以上64位的系統(tǒng),下面演示所使用的環(huán)境就是 Windows 7的64位系統(tǒng)。
圖 3 - STLINK驅動的安裝
安裝完驅動后,將開發(fā)板通過Micro USB線與PC電腦連接,同時打開Windows的 設備管理器。如果在設備管理器中能找到如圖四所示的COM端口,證明驅動安裝成功。具體是 “COM3” 還是 “COM4”,這個值在不同的電腦上顯示的可能不同,記住這個值,后面使用LiteOS Studio設置串口參數(shù)的時候會有用。
圖 4 - STLINK 虛擬串口
但有時候插上USB線加載驅動會碰到問題,驅動提示安裝不成功。
圖 5 - 驅動提示安裝不成功
同時設備管理器中出現(xiàn)惱人的黃色感嘆號,并提示 “ST-Link VCP Ctrl”。
圖 6 - 設備管理器提示 “ST-Link VCP Ctrl” 失敗
這個問題據(jù)說多半是由于使用了非正版的Windows系統(tǒng)所致。
2、LiteOS Studio開發(fā)環(huán)境搭建
LiteOS Studio是華為基于LiteOS嵌入式系統(tǒng)軟件開發(fā)的工具,支持C、C++、匯編等多種開發(fā)語言,提供代碼編輯、編譯、燒錄及調試等一站式開發(fā)體驗。目前支持 ARM Cortex-M0、Cortex-M4、Cortex-M7、Cortex-A7和ARM926EJ-S等芯片架構。LiteOS Studio目前已經(jīng)適配了多種開發(fā)板,其中包括ST、HiSilicon、Fudan Microelectronics等主流廠商的開發(fā)板。BearPi基于ST的芯片方案,很方便地可以得到LiteOS Studio的支持。
2.1 安裝LiteOS Studio
解壓 “小熊派開發(fā)板資料1軟件資料” 目錄下的 “LiteOS_IDE.zip” 壓縮包 ,雙擊安裝程序,如 圖7 所示, 根據(jù)提示進行安裝。
安裝過程中注意以下幾點:
安裝路徑不能有中文路徑,否則即使安裝成功程序運行也會異常。
目前IDE只支持 Win7 以上的64位操作系統(tǒng),所以安裝前請先確認 Windows 系統(tǒng)版本是否滿足。
圖 7 - 安裝 LiteOS Studio
2.2 創(chuàng)建LiteOS Studio工程
打開LiteOS Studio軟件,在首頁上單擊 “創(chuàng)建LiteOS Studio工程”。
圖 8 - 創(chuàng)建 LiteOS Studio 工程
然后LiteOS Studio會彈出 “配置工程界面”,此時可以對新創(chuàng)建的工程進行基本配置。我們采用最簡單的方式進行演示,依次配置如下信息,參考圖9的紅色線框標識:
圖 9 - 配置LiteOS Studio工程信息
LiteOS SDK版本:即本工程基于的LiteOS的內(nèi)核和中間件的版本,對于LiteOS這樣的嵌入式系統(tǒng),應用和內(nèi)核是一起參與編譯的。這里我們使用缺省版本,即LiteOS Studio安裝時自帶的一份SDK模版。
工程名稱:自己定義,本文填寫為 demo。
工程目錄:工程的父目錄,請選擇一個本機存在的目錄即可,本文填寫為 D:wsiot-dev。
工程類型:選擇 “端云最佳實踐”,這里LiteOS Studio 自帶了一份配合BearPi 的樣例工程,我們直接使用即可。
配置好后直接點擊 “完成”,需要一些時間,完成后打開IDE的界面如下。
圖 10 - LiteOS Studio 界面布局
同時在你指定的 “工程目錄” 下創(chuàng)建名為demo的工程子目錄并拷貝了相應的SDK和樣板工程的代碼在工程目錄里。
圖 11 - 創(chuàng)建的工程目錄
2.3 配置LiteOS Studio工程
工程打開后先不要急著編譯,正常流程中還需要先配置一下。菜單選擇 “工程” -> “工程配置”,或者直接點擊工具欄中的圖標如下圖所示。
圖 12 - 配置LiteOS Studio工程
彈出如下 “工程配置” 對話框。由于這里我們使用的是樣板工程,這些內(nèi)容已經(jīng)都給我們配置好了,所以可以直接忽略這一步。
圖 13 - LiteOS Studio工程配置界面
2.4 編譯LiteOS Studio工程
菜單選擇 “工程” -> “編譯” 或者點擊工具欄上的圖標如下圖所示。
圖 14 - 編譯LiteOS Studio工程
編譯會需要一點時間,但相對于Linux那樣的大型系統(tǒng)來說還是很快的。編譯完成后顯示 “編譯成功” 以及編譯花費的時間。
圖 15 - 編譯成功
3.5 燒錄LiteOS Studio工程
無論是運行還是調試,都需要將編譯好的程序先下載(習慣上稱之為 “燒錄”)到開發(fā)板上去。這里我們先確保使用Micro USB線將BearPi 開發(fā)板和PC連接好,確保設備管理器上的虛擬串口加載完成(即設備管理器中出現(xiàn)COM端口,如圖4所示),然后菜單選擇 “工程” -> “燒錄”,或者直接點擊工具欄中的圖標如下圖所示。
圖 16 - 燒錄LiteOS Studio工程
等待燒錄完成,界面的控制臺中會輸出整個燒錄過程信息,直到完成后顯示 “燒錄成功”。
圖 17 - 燒錄成功
2.6 調試LiteOS Studio工程
簡單介紹一下如何在 LiteOS 工程中通過串口打印實現(xiàn)日志跟蹤以及如何使用在線調試單步跟蹤。
2.6.1 串口打印
調試手段中最基本的就是加打印輸出,LiteOS也支持通過串口輸出跟蹤信息。下面介紹一下如何配置串口。注意:如果要確保下面的步驟中能夠在 “串口終端” 中看到打印輸出,需要檢查BearPi的AT開關,確保其撥到MCU一側,如下圖所示。
圖 18 - AT 開關
采用LiteOS Studio自帶的串口終端即可接收MCU發(fā)送的信息。第一次安裝后缺省不顯示串口終端,通過菜單選擇 “查看” -> “串口終端” 可以將該終端窗口顯示出來。
圖 19 - 顯示串口終端
串口終端顯示后還需要對LiteOS Studio做一些串口的基本配置才可以接收串口信息。點擊下圖中左上側的 “齒輪” 圖標。
圖 20 - 配置串口終端
再次打開 “工程配置” 對話框,選擇 “串口配置” 項后配置如下信息:
圖 21 - 配置串口終端界面
端口:這里選擇在安裝驅動時看到的COM的端口值,這里選擇COM3。
波特率:115200,缺省不變。
數(shù)據(jù)位:8,缺省不變。
停止位:1,缺省不變。
奇偶(校驗):None,缺省不變。
流控:None,缺省不變。
此外還可以勾選是否自動將串口輸出的內(nèi)容保存到日志文件中并指定日志文件的存放路徑。
點擊 “確認” 后保存串口配置,但此時串口并未開始工作,需要繼續(xù)參考下圖將端口打開使能。這樣以后我們就可以看到 “串口終端” 中開始有內(nèi)容輸出了,左邊顯示的是可讀的ASCII字符信息,右邊顯示的是對應的十六制輸出。之所以存在輸出是因為我們這里演示采用的例子中已經(jīng)有一些調用printf() 函數(shù)的輸出,以后我們在實驗中也可以通過類似操作在這里查看程序的執(zhí)行過程。
圖 22 - 打開串口
2.6.2 單步跟蹤 LiteOS Studio工程
LiteOS Studio也支持在線單步調試程序。方法很簡單。首先確保BearPi開發(fā)板通過 Micro USB線連接PC(這也是我們稱之為 “在線調試” 的原因),并將需要調試的程序下載燒錄到開發(fā)板中,然后菜單選擇 “調試” -> “開始/繼續(xù)”,或者直接點擊工具欄中的圖標如下圖所示。
圖 23 - 調試LiteOS Studio工程
此時調試器會自動加載對應代碼并暫停在整個系統(tǒng)程序的入口處,接下來的操作和我們操作其他的IDE類似。
圖 24 - LiteOS Studio工程調試界面
審核編輯:湯梓紅
-
WINDOWS
+關注
關注
3文章
3541瀏覽量
88617 -
開發(fā)環(huán)境
+關注
關注
1文章
225瀏覽量
16609 -
Huawei
+關注
關注
1文章
176瀏覽量
20162 -
Liteos
+關注
關注
10文章
32瀏覽量
47556 -
內(nèi)核模塊
+關注
關注
0文章
10瀏覽量
3086
原文標題:漫談Huawei LiteOS五大內(nèi)核模塊,圖解LiteOS開發(fā)環(huán)境快速搭建
文章出處:【微信號:雨飛工作室,微信公眾號:雨飛工作室】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論