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