




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
嵌入式系統(tǒng)原理及應用第8章線程管理1線程基本概念2線程工作機制3線程應用方法及實例45課后作業(yè)本章總結線程概念線程管理方式及特點8.1線程基本概念本節(jié)小結8.1.1線程概念模塊化編程是嵌入式系統(tǒng)設計的基本思想之一,通常將一個大的任務分解為多個簡單易解決的小任務。線程是任務的實現(xiàn)載體,是RTT操作系統(tǒng)中最基本的調度單位。8.1.2線程管理方式及特點線程管理的主要功能是對線程進行管理和調度,以實現(xiàn)不同線程的快速切換,達到多線程同時運行的目的,實際上同一時刻MCU只能運行一個線程。8.1.2線程管理方式及特點線程調度由線程調度器完成,RT-Thread的線程調度器是搶占式:保證最高優(yōu)先級的線程優(yōu)先運行。(1)無線程運行時,從就緒線程列表中查找最高優(yōu)先級線程運行。(2)低優(yōu)先級線程使高優(yōu)先級的線程滿足運行條件,當前線程停止運行,高優(yōu)先級的線程運行。(3)中斷服務程序使高優(yōu)先級的線程滿足運行條件,中斷完成時,被中斷的線程掛起,高優(yōu)先級線程運行。線程切換時,調度器先將當前線程上下文信息保存,當再切回到這個線程時,調度器將該線程的上下文信息恢復。本節(jié)小結理解線程的概念;理解線程管理方式及特點。線程控制塊線程重要屬性8.2線程工作機制系統(tǒng)線程本節(jié)小結8.2.1線程控制塊線程控制塊是操作系統(tǒng)用于管理線程的一個數據結構,存放了線程的優(yōu)先級、線程名稱、線程狀態(tài)、鏈表結構、線程等待事件集合等信息,在RT-Thread中,線程控制塊由結構體structrt_thread表示,指向線程控制塊的指針稱為線程句柄,用rt_thread_t表示。8.2.1線程控制塊structrt_thread{/*rtobject*/charname[RT_NAME_MAX];/*線程名稱*/
rt_uint8_ttype;/*對象類型*/
rt_uint8_tflags;/*標志位*/
rt_list_tlist;/*對象鏈表*/
rt_list_ttlist;/*線程鏈表*/
/*stackpointandentry*/void*sp;/*棧指針*/
void*entry;/*線程入口函數指針*/
void*parameter;/*線程參數*/
void*stack_addr;/*棧地址*/
rt_uint32_tstack_size;/*棧大小*/
/*errorcode*/rt_err_terror;/*錯誤代碼*/
rt_uint8_tstat;/*線程狀態(tài)*/
/*priority*/rt_uint8_tcurrent_priority;/*線程當先優(yōu)先級*/
rt_uint8_tinit_priority;/*線程初始化優(yōu)先級*/
rt_ubase_tinit_tick;/*線程初始化計數值*/
rt_ubase_tremaining_tick;/*剩余計數值*/
structrt_timerthread_timer;/*內置定時器*/
void(*cleanup)(structrt_thread*tid);/*線程退出清除函數*/
rt_ubase_tuser_data;/*用戶數據*/};typedefstructrt_thread*rt_thread_t;線程控制塊線程句柄結構體:structrt_threadtid1;=“tid1”結構體指針:rt_thread_ttid2;tid2->name=“tid2”;8.2.2線程重要屬性1.線程名稱線程名稱即線程的名字,由用戶命名,命名規(guī)則遵循C語言變量命名規(guī)則,通常以字母開頭,線程名稱的最大長度由rtconfig.h中的宏RT_NAME_MAX指定,多余部分會被自動截掉,默認長度為8位。2.線程入口函數線程入口函數是線程實現(xiàn)預期功能的函數,線程的入口函數由用戶設計實現(xiàn),有無限循環(huán)和順序執(zhí)行或有限次循環(huán)兩種模式,在創(chuàng)建線程或初始化線程時可以傳入參數。8.2.2線程重要屬性2.線程入口函數無限循環(huán)模式voidthread_entry(void*paramenter){while(1){/*等待事件的發(fā)生*//*對事件進行服務、進行處理*/}}順序執(zhí)行或有限次循環(huán)模式staticvoidthread_entry(void*parameter){/*處理事務#1*/…/*處理事務#2*/…/*處理事務#3*/}注意:調用延時函數或者主動掛起。注意:簡單的順序語句、dowhlie()或for()循環(huán)8.2.2線程重要屬性3.線程棧RT-Thread線程具有獨立的棧,當進行線程切換時,會將當前線程的上下文信息保存在棧中,當線程恢復運行時,再從棧中讀取上下文信息,進行恢復。線程棧大小可根據實際情況設定,對于資源相對較大的MCU,可以適當設計較大的線程棧,對于資源較小的MUC可以在初始時設置較大的棧,如1K或2K字節(jié),然后在FinSH中用list_thread命令查看線程運行過程中使用棧的大小,加上適當的余量形成最終的線程棧大小。8.2.2線程重要屬性4.線程優(yōu)先級線程的優(yōu)先級表示線程被調度的優(yōu)先程度,每個線程都具有優(yōu)先級,應給重要的線程賦予較高的優(yōu)先級,增大其被調度的可能。對于ARMCortex-M系列,普遍采用32個優(yōu)先級。最低優(yōu)先級默認分配給空閑線程(31),用戶一般不使用。在系統(tǒng)中,當有比當前線程優(yōu)先級更高的線程就緒時,當前線程將立刻被換出,高優(yōu)先級線程搶占處理器運行。8.2.2線程重要屬性5.時間片當線程優(yōu)先級相同時,時間片才起作用,系統(tǒng)對優(yōu)先級相同的就緒態(tài)線程采用時間片輪轉算法進行調度,即線程輪轉執(zhí)行相應個系統(tǒng)節(jié)拍(1ms)。8.2.2線程重要屬性6.線程狀態(tài)對于單核MCU,同一時刻只允許運行一個線程,操作系統(tǒng)會自動根據線程運行的情況動態(tài)地調整線程狀態(tài)。RT-Thread中線程共有五種狀態(tài)。8.2.2線程重要屬性6.線程狀態(tài)對于單核MCU,同一時刻只允許運行一個線程,操作系統(tǒng)會自動根據線程運行的情況動態(tài)地調整線程狀態(tài)。RT-Thread中線程共有五種狀態(tài)。初始狀態(tài)關閉狀態(tài)就緒狀態(tài)運行狀態(tài)掛起狀態(tài)創(chuàng)建啟動獲取資源得不到或者延時獲取到資源,或者延時時間到自然結束強制結束(一般不用)8.2.2線程重要屬性6.線程狀態(tài)調用函數rt_thread_create/init創(chuàng)建/初始化的線程處于初始態(tài);初始態(tài)線程調用函rt_thread_startup進入就緒態(tài);就緒態(tài)線程被調度器調度后進入運行態(tài);處于運行狀態(tài)的線程調用rt_thread_delay,rt_sem_take,rt_mutex_take,rt_mb_recv等函數或者獲取不到資源時,將進入掛起態(tài);處于掛起態(tài)的線程等待超時依然未能獲得資源或由于其它線程釋放了資源,將返回就緒態(tài)。掛起態(tài)的線程調用rt_thread_delete/detach函數,將轉換為關閉態(tài);運行態(tài)的線程運行結束時,會在線程的最后部分執(zhí)行函數rt_thread_exit,將狀態(tài)改為關閉態(tài)。8.2.2線程重要屬性7.錯誤代碼/*線程錯誤代碼*/#defineRT_EOK0/*無錯誤*/#defineRT_ERROR1/*普通錯誤*/#defineRT_ETIMEOUT2/*超時*/#defineRT_EFULL3/*資源已滿*/#defineRT_EEMPTY4/*無資源*/#defineRT_ENOMEM5/*無內存*/#defineRT_ENOSYS6/*系統(tǒng)不支持*/#defineRT_EBUSY7/*系統(tǒng)忙*/#defineRT_EIO8/*IO錯誤*/#defineRT_EINTR9/*中斷系統(tǒng)調用*/#defineRT_EINVAL10/*非法參數*/8.2.3系統(tǒng)線程根據線程創(chuàng)建者,將線程分為系統(tǒng)線程和用戶線程兩類,系統(tǒng)線程是由RT-Thread內核創(chuàng)建的線程,用戶線程是由應用程序調用線程管理接口創(chuàng)建的線程。RT-Thread中的系統(tǒng)線程有空閑線程和主線程。1.空閑線程空閑線程(idle)是系統(tǒng)創(chuàng)建的最低優(yōu)先級的線程,線程狀態(tài)永遠處于就緒態(tài)。當系統(tǒng)中無其它就緒線程時,調度器將調度空閑線程,它通常是一個死循環(huán),且永遠不能被掛起。8.2.3系統(tǒng)線程RT-Thread中的系統(tǒng)線程有空閑線程和主線程。1.空閑線程空閑線程主要用于回收被刪除線程的資源,如某線程運行完畢,系統(tǒng)將自動執(zhí)行rt_thread_exit函數,先將該線程從就緒隊列中刪除,再將該線程的狀態(tài)更改為關閉態(tài),然后掛入僵尸隊列(資源未回收,處于關閉態(tài)的線程隊列)中,最后由空閑線程回收該線程的資源。此外,空閑線程提供了接口來運行用戶設置的鉤子函數,適合鉤入功耗管理、看門狗喂狗等工作。8.2.3系統(tǒng)線程所有線程都不運行了,空閑線程才運行??臻e線程:職位較低,工作乏味!8.2.3系統(tǒng)線程RT-Thread中的系統(tǒng)線程有空閑線程和主線程。2.主線程系統(tǒng)啟動時會創(chuàng)建main線程,它的入口函數為main_thread_entry,用戶的應用入口函數main就是從這里真正開始的,系統(tǒng)調度器啟動后,main線程就開始運行,用戶可以在main函數里添加自己的應用程序初始化代碼。本節(jié)小結理解線程控制塊;熟悉線程的重要屬性;掌握線程狀態(tài)轉換;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 手繪金魚國畫與西瓜主題藝術課件
- 數學高段課標及教學培訓
- 地震逃生和基本救護知識
- 護理查房病歷匯報
- 電工電子技術 課件 7. 三相交流異步電動機電路的連接與測試
- 辦公室智慧管理方案
- 統(tǒng)編版2024~2025學年度六年級語文第二學期期中模擬卷(有答案)
- 教育功能唐智松
- 第一單元評估檢測題( A 卷)單元測試(無答案)三年級下冊數學西師大版
- 建筑工程風險管理案例分析
- 中醫(yī)五臟心完整版本
- 郵政集團社招柜員筆試題
- 第9課 古代的商路、貿易與文化交流 -2023-2024學年高二歷史同步教學課件(選必3文化交流與傳播)
- 船舶機艙自動化4.4 主機遙控系統(tǒng)的轉速與負荷控制
- Mini-CEX的測評內容人文關懷
- 家政保潔培訓課件教學
- 醫(yī)學生創(chuàng)新創(chuàng)業(yè)課件概述
- 《秤的發(fā)展史》課件
- 醫(yī)院感染科護士對防控感染的終末消毒與徹底清潔
- 酒店飯店服務流程
- 英語八年級英語上冊閱讀理解100及答案經典
評論
0/150
提交評論