版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、OH操作系統(tǒng)基礎(chǔ):Thread多線程未來已來 遠(yuǎn)方不遠(yuǎn)2021年12月本示例將演示如何在Niobe WiFi IoT開發(fā)板上使用cmsis 2.0 接口進(jìn)行多線程開發(fā)。簡介CMSIS是Cortex微控制器軟件接口標(biāo)準(zhǔn)(Cortex Microcontroller Software Interface Standard)是ARM和一些編譯器廠家以及半導(dǎo)體廠家共同遵循的一套標(biāo)準(zhǔn),是由ARM專門針對Cortex-M系列提出的標(biāo)準(zhǔn)。在該標(biāo)準(zhǔn)的約定下,ARM和芯片廠商會提供一些通用的API接口來訪問Cortex內(nèi)核以及一些專用外設(shè),以減少更換芯片以及開發(fā)工具等移植工作所帶來的金錢以及時間上的消耗。CMS
2、IS-RTOS2(CMSIS-RTOS API Version 2)是Arm Cortex-M 處理器的通用的RTOS接口。為需要RTOS功能的軟件組件提供了標(biāo)準(zhǔn)化的API。CMSIS-RTOS2是一個通用的API,它與底層的RTOS內(nèi)核無關(guān),寫應(yīng)用程序的程序員在用戶代碼中調(diào)用CMSIS RTOS2 API函數(shù),可以更方便地將應(yīng)用程序從一個RTOS到另一個RTOS,使用CMSIS-RTOS2 API的中間件也可以避免很多不必要的移植工作。鴻蒙在CMSIS-RTOS2接口中封裝了LiteOS-m的內(nèi)核代碼cmsis 2.0接口 1. 線程的基本概念2. 線程的狀態(tài)3. 創(chuàng)建線程目錄從系統(tǒng)角度看,
3、線程是競爭系統(tǒng)資源的最小運(yùn)行單元。線程可以使用或等待CPU、使用內(nèi)存空間等系統(tǒng)資源,并獨立于其它線程運(yùn)行。OpenHarmony LiteOS可以給用戶提供多個線程,實現(xiàn)線程間的切換,幫助用戶管理業(yè)務(wù)程序流程。具有如下特性:支持多線程。一個線程代表一個任務(wù)搶占式調(diào)度機(jī)制,高優(yōu)先級的線程可打斷低優(yōu)先級線程,低優(yōu)先級線程必須在高優(yōu)先級線程阻塞或結(jié)束后才能得到調(diào)度。相同優(yōu)先級線程支持時間片輪轉(zhuǎn)調(diào)度方式。共有32個優(yōu)先級0-31,最高優(yōu)先級為0,最低優(yōu)先級為31。用戶進(jìn)程可配置的優(yōu)先級有22個 (1031)?;靖拍罹€程有多種運(yùn)行狀態(tài)。系統(tǒng)初始化完成后,創(chuàng)建的線程就可以在系統(tǒng)中競爭一定的資源,由內(nèi)核進(jìn)
4、行調(diào)度。線程狀態(tài)通常分為以下四種:就緒(Ready):該線程在就緒隊列中,只等待CPU。運(yùn)行(Running):該線程正在執(zhí)行。阻塞(Blocked):該線程不在就緒隊列中。包含線程被掛起(suspend狀態(tài))、線程被延時(delay狀態(tài))、線程正在等待信號量、讀寫隊列或者等待事件等。退出態(tài)(Dead):該線程運(yùn)行結(jié)束,等待系統(tǒng)回收資源。線程狀態(tài)就緒態(tài)運(yùn)行態(tài): 任務(wù)創(chuàng)建后進(jìn)入就緒態(tài),發(fā)生任務(wù)切換時,就緒隊列中最高優(yōu)先級的任務(wù)被執(zhí)行,從而進(jìn)入運(yùn)行態(tài),同時該任務(wù)從就緒隊列中移出。運(yùn)行態(tài)阻塞態(tài) :正在運(yùn)行的任務(wù)發(fā)生阻塞(掛起、延時、讀信號量等)時,將該任務(wù)插入到對應(yīng)的阻塞隊列中,任務(wù)狀態(tài)由運(yùn)行態(tài)變成
5、阻塞態(tài),然后發(fā)生任務(wù)切換,運(yùn)行就緒隊列中最高優(yōu)先級任務(wù)。阻塞態(tài)就緒態(tài)(阻塞態(tài)運(yùn)行態(tài)):阻塞的任務(wù)被恢復(fù)后(任務(wù)恢復(fù)、延時時間超時、讀信號量超時或讀到信號量等),此時被恢復(fù)的任務(wù)會被加入就緒隊列,從而由阻塞態(tài)變成就緒態(tài);此時如果被恢復(fù)任務(wù)的優(yōu)先級高于正在運(yùn)行任務(wù)的優(yōu)先級,則會發(fā)生任務(wù)切換,該任務(wù)由就緒態(tài)變成運(yùn)行態(tài)。線程狀態(tài)遷移就緒態(tài)阻塞態(tài) : 任務(wù)也有可能在就緒態(tài)時被阻塞(掛起),此時任務(wù)狀態(tài)由就緒態(tài)變?yōu)樽枞麘B(tài),該任務(wù)從就緒隊列中刪除,不會參與任務(wù)調(diào)度,直到該任務(wù)被恢復(fù)。運(yùn)行態(tài)就緒態(tài) : 有更高優(yōu)先級任務(wù)創(chuàng)建或者恢復(fù)后,會發(fā)生任務(wù)調(diào)度,此刻就緒隊列中最高優(yōu)先級任務(wù)變?yōu)檫\(yùn)行態(tài),那么原先運(yùn)行的任務(wù)由
6、運(yùn)行態(tài)變?yōu)榫途w態(tài),依然在就緒隊列中。運(yùn)行態(tài)退出態(tài) : 運(yùn)行中的任務(wù)運(yùn)行結(jié)束,任務(wù)狀態(tài)由運(yùn)行態(tài)變?yōu)橥顺鰬B(tài)。退出態(tài)包含任務(wù)運(yùn)行結(jié)束的正常退出狀態(tài)以及Invalid狀態(tài)。例如,任務(wù)運(yùn)行結(jié)束但是沒有自刪除,對外呈現(xiàn)的就是Invalid狀態(tài),即退出態(tài)。阻塞態(tài)退出態(tài) : 阻塞的任務(wù)調(diào)用刪除接口,任務(wù)狀態(tài)由阻塞態(tài)變?yōu)橥顺鰬B(tài)。對于多線程的場景,HarmonyOS內(nèi)核管理線程靠任務(wù)池和就緒隊列,執(zhí)行靠調(diào)度算法。調(diào)度算法:HarmonyOS內(nèi)核中的線程采用搶占式調(diào)度機(jī)制,同時支持SCHED_RR和SCHED_FIFO調(diào)度策略線程管理RR策略能基本保證我們每個任務(wù)都能夠得到有效的執(zhí)行,不會有一些任務(wù)進(jìn)行長時間等待F
7、IFO策略優(yōu)點在于任務(wù)的切換比較簡單,而且對于一些時間片不好把握的任務(wù)來說,F(xiàn)IFO能偶更有效的利用我們的cpu。頭文件:”/third_party/cmsis/CMSIS/RTOS2/Include/cmsis_os2.h”線程創(chuàng)建-API介紹API功能描述osThreadNew創(chuàng)建線程osThreadTerminate刪除某個線程(一般是對非自線程操作)osThreadYield掛起當(dāng)前線程osThreadSuspend掛起指定線程osThreadResume恢復(fù)指定線程osThreadExit終止當(dāng)前線程osThreadTerminate終止指定線程函數(shù)osThreadNew通過將線程添
8、加到活動線程列表并將其設(shè)置為就緒狀態(tài)來啟動線程函數(shù)。線程函數(shù)的參數(shù)使用參數(shù)指針*argument傳遞。當(dāng)創(chuàng)建的thread函數(shù)的優(yōu)先級高于當(dāng)前運(yùn)行的線程時,創(chuàng)建的thread函數(shù)立即啟動并成為新的運(yùn)行線程。線程屬性是用參數(shù)指針attr定義的。屬性包括線程優(yōu)先級、堆棧大小或內(nèi)存分配的設(shè)置??梢栽赗TOS啟動(調(diào)用 osKernelStart)之前安全地調(diào)用該函數(shù),但不能在內(nèi)核初始化 (調(diào)用 osKernelInitialize)之前調(diào)用該函數(shù)。線程創(chuàng)建名稱描述func線程函數(shù)argument作為啟動參數(shù)傳遞給線程函數(shù)的指針attr線程屬性返回值線程ID,如果出錯,返回NULLosThreadId
9、_t osThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr);線程創(chuàng)建-線程屬性osThreadAttr_t名稱數(shù)據(jù)類型描述nameconst char*線程名稱attr_bitsuint32_t線程屬性位cb_memvoid*線程控制塊的內(nèi)存每個線程都含有一個線程控制塊(TCB)。TCB包含了線程上下文棧指針(stack pointer)、線程狀態(tài)、線程優(yōu)先級、線程ID、線程名、線程棧大小等信息。TCB可以反映出每個線程運(yùn)行情況。cb_sizeuint32_t線程控制塊的內(nèi)存大小stack_m
10、emvoid*棧的內(nèi)存每個線程都擁有一個獨立的棧空間,我們稱為線程棧。??臻g里保存的信息包含局部變量、寄存器、函數(shù)參數(shù)、函數(shù)返回地址等。stack_sizeuint32_t棧的大小priorityosPriority_t優(yōu)先級優(yōu)先級表示任務(wù)執(zhí)行的優(yōu)先順序。線程的優(yōu)先級決定了在發(fā)生線程切換時即將要執(zhí)行的線程,就緒隊列中最高優(yōu)先級的線程將得到執(zhí)行。線程創(chuàng)建-實例在OS_Thread_example函數(shù)中,通過osThreadNew()函數(shù)創(chuàng)建了thread1和thread2兩個進(jìn)程,thread1和thread2啟動后會輸出打印日志。/*任務(wù)一*/void thread_entry1(void)
11、int sum = 0; while (1) printf(This is Niobe Thread1-%drn, sum+); usleep(500000); /*任務(wù)二*/void thread_entry2(void) int sum = 0; while (1) printf(This is Niobe Thread2-%drn, sum+); usleep(500000); /*任務(wù)創(chuàng)建*/static void OS_Thread_example(void) osThreadAttr_t attr; = thread1; attr.attr_bits = 0U;
12、 attr.cb_mem = NULL; attr.cb_size = 0U; attr.stack_mem = NULL; attr.stack_size = 1024*4; attr.priority = 25; if (osThreadNew(osThreadFunc_t)thread_entry1, NULL, &attr) = NULL) printf(Falied to create thread1!n); = thread2; if (osThreadNew(osThreadFunc_t)thread_entry2, NULL, &attr) = NULL) printf(Falied to create thread2!n)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人貸款協(xié)議樣本(2024年度版)版
- 2025年度電商客服外包服務(wù)滿意度調(diào)查合同4篇
- 二零二五年度充值卡充值業(yè)務(wù)合作伙伴協(xié)議4篇
- 2025年度船舶船員聘用及船舶動力系統(tǒng)維護(hù)合同4篇
- 二零二五年度工業(yè)地產(chǎn)承包招商合作協(xié)議書3篇
- 23-24年項目部治理人員安全培訓(xùn)考試題附下載答案可打印
- 2023年-2024年新員工入職前安全教育培訓(xùn)試題附完整答案(奪冠)
- 二零二五年度電力設(shè)備安裝工程師勞動合同范本3篇
- 2023年員工三級安全培訓(xùn)考試題及參考答案一套
- 二零二五年度畜牧機(jī)械租賃及售后服務(wù)合同4篇
- 2024-2030年中國光電干擾一體設(shè)備行業(yè)發(fā)展現(xiàn)狀與前景預(yù)測分析研究報告
- 小學(xué)三年級下冊奧數(shù)題100道附答案
- 湖南省岳陽市岳陽樓區(qū)2023-2024學(xué)年七年級下學(xué)期期末數(shù)學(xué)試題(解析版)
- 農(nóng)村自建房安全合同協(xié)議書
- 杜仲葉藥理作用及臨床應(yīng)用研究進(jìn)展
- 4S店售后服務(wù)6S管理新規(guī)制度
- 高性能建筑鋼材的研發(fā)與應(yīng)用
- 無線廣播行業(yè)現(xiàn)狀分析
- 漢語言溝通發(fā)展量表(長表)-詞匯及手勢(8-16月齡)
- 高速公路相關(guān)知識講座
- 兒科關(guān)于抗生素使用的PDCA
評論
0/150
提交評論