亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread多線程學(xué)習(xí)后的總結(jié)

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 作者:RTThread物聯(lián)網(wǎng)操作 ? 2021-01-13 16:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

多線程是實(shí)時(shí)操作系統(tǒng)里面最重要的知識(shí)點(diǎn)之一,要學(xué)習(xí)RTOS,多線程是必須(沒錯(cuò),是必須)要熟練掌握的內(nèi)容,只有熟練掌握多線程的使用,才能在平時(shí)的項(xiàng)目工作里面用好實(shí)時(shí)操作系統(tǒng)。

關(guān)于多線程的使用和管理,RT-Thread官方提供了比較豐富的文檔作為參考,具體內(nèi)容可以查看以下鏈接:

https://www.rt-thread.org/document/site/programming-manual/thread/thread/

本文是對(duì)RT-Thread多線程學(xué)習(xí)后的總結(jié),并嘗試從如圖所示的以下幾個(gè)方面進(jìn)行總結(jié)。

4c0119c4-51a5-11eb-8b86-12bb97331649.png

什么是多線程?

單片機(jī)上學(xué)習(xí)RT-Thread的多線程之前,要先把“進(jìn)程”這個(gè)概念先放一邊,因?yàn)閱纹瑱C(jī)是沒有多進(jìn)程概念的。單片機(jī)運(yùn)行操作系統(tǒng),不管多少個(gè)任務(wù),他們都是多個(gè)(或單個(gè))線程之間進(jìn)行處理這些任務(wù),單片機(jī)一般不涉及多進(jìn)程。

什么是多線程?在哪些情況下要用到多線程?先來舉一個(gè)音樂播放器的例子,這個(gè)音樂播放器要做以下這些基本的工作:讀取音樂文件并播放、讀取歌詞并顯示、讀取MV文件并播放。

如果這三個(gè)基本的工作不用多線程來完成,單片機(jī)使用裸機(jī)的方式去做這三個(gè)工作的話,必然會(huì)造成音樂播放卡頓,歌詞顯示不同步,MV視頻播放與音樂不同步。

因?yàn)閱纹瑱C(jī)做這三件事情的時(shí)候,是Step by Step的,必須完成一件事情之后,再去做下一件事情,這三件事情是有先后順序的,并且不斷循環(huán)重復(fù),如下圖所示。

4c41938c-51a5-11eb-8b86-12bb97331649.png

而如果采用多線程這種方式來完成這個(gè)工作,這個(gè)過程就變得相對(duì)簡(jiǎn)單了,比如針對(duì)音樂播放器這個(gè)場(chǎng)景,可以設(shè)計(jì)這幾個(gè)線程來處理:音樂文件讀取線程,歌詞文件讀取線程,MV文件讀取線程,音視頻和歌詞顯示線程。

(此處只為舉例描述多線程的概念,不考慮音視頻編解碼的復(fù)雜過程,不考慮線程同步,實(shí)際上音樂播放器的實(shí)現(xiàn)比此處描述更復(fù)雜)

音樂文件讀取線程只負(fù)責(zé)從磁盤讀取音樂文件,歌詞文件讀取線程和MV文件讀取線程也是同樣的道理,它們只做文件讀取工作,而音視頻和歌詞顯示線程,是負(fù)責(zé)把讀取到的數(shù)據(jù)進(jìn)行顯示。這幾個(gè)線程的工作過程,如下圖所示。

4c9bb114-51a5-11eb-8b86-12bb97331649.png

如上圖所示,這幾個(gè)任務(wù)看上去是“同時(shí)”進(jìn)行的,每個(gè)任務(wù)都只完成自己的事情,通過多線程,就可以把原本串行完成的任務(wù)改為并行完成,大大提高了工作效率。

所以,通俗地對(duì)多線程進(jìn)行理解,就是把一個(gè)比較大型的任務(wù),拆分為多個(gè)小型的任務(wù),然后通過合理的調(diào)度方式,讓這幾個(gè)小型的任務(wù)“同時(shí)”運(yùn)行,當(dāng)這幾個(gè)小型任務(wù)完成后,大型的任務(wù)也隨之完成,這樣可以大大提高任務(wù)的完成效率。

多線程的幾種狀態(tài)

對(duì)于運(yùn)行RT-Thread操作系統(tǒng),線程都處于以下五種狀態(tài)的其中一種(初始狀態(tài)、就緒狀態(tài)、運(yùn)行狀態(tài)、掛起狀態(tài)、關(guān)閉狀態(tài)),通過調(diào)用操作系統(tǒng)提供的接口函數(shù),可以讓線程在這五種狀態(tài)中進(jìn)行來回切換。

4cda31aa-51a5-11eb-8b86-12bb97331649.png

關(guān)于這五種線程狀態(tài)的描述,如下表所示:

4d28d3c8-51a5-11eb-8b86-12bb97331649.png

多線程的API函數(shù)

如上圖的狀態(tài)機(jī)所示,多線程可以通過調(diào)用系統(tǒng)提供的函數(shù)接口,在多個(gè)狀態(tài)之間進(jìn)行切換。這些API函數(shù)在官方提供的參考文檔里面都有詳細(xì)的說明描述,以下列舉一些比較常用的函數(shù)接口。

4d67ac38-51a5-11eb-8b86-12bb97331649.png

上下滑動(dòng)查看 API 函數(shù)

多線程的應(yīng)用示例

多線程的應(yīng)用示例,主要是為了驗(yàn)證以上的多線程API接口函數(shù),并且通過實(shí)驗(yàn)現(xiàn)象觀察多線程的運(yùn)行情況,主要有以下三個(gè)示例:

示例源碼下載鏈接:

https://github.com/embediot/rtthread_study_notes

1、線程動(dòng)態(tài)創(chuàng)建與靜態(tài)創(chuàng)建、線程退出示例。

這個(gè)示例主要是通過動(dòng)態(tài)方式創(chuàng)建線程1,,通過靜態(tài)方式創(chuàng)建線程2,線程1的優(yōu)先級(jí)比線程2的優(yōu)先級(jí)低,因此可以被線程2搶占。線程2運(yùn)行10次后就會(huì)主動(dòng)退出,初始化代碼如下圖所示。

4deffb10-51a5-11eb-8b86-12bb97331649.png

2、相同優(yōu)先級(jí)線程的時(shí)間片輪轉(zhuǎn)調(diào)度示例。

這個(gè)示例主要是通過動(dòng)態(tài)方式創(chuàng)建線程1和線程2,這兩個(gè)線程都是相同的優(yōu)先級(jí),并且共用一個(gè)線程入口函數(shù),主要是通過傳入不同的線程參數(shù)以區(qū)分線程1和線程2。線程2運(yùn)行所占用的時(shí)間片比線程1要少,因此線程2運(yùn)行的時(shí)間比較短,初始化代碼如下圖所示。

4e31fdee-51a5-11eb-8b86-12bb97331649.png

3、線程調(diào)度器的鉤子函數(shù)使用示例。

這個(gè)示例主要測(cè)試了線程在進(jìn)行調(diào)度時(shí),關(guān)于鉤子函數(shù)的調(diào)用情況。通過線程調(diào)度器的鉤子函數(shù),打印出線程間的切換信息,初始化的代碼如下圖所示。

4e8a46f2-51a5-11eb-8b86-12bb97331649.png

多線程應(yīng)用的注意事項(xiàng)

在使用RT-Thread實(shí)時(shí)操作系統(tǒng)進(jìn)行多線程應(yīng)用開發(fā)的時(shí)候,應(yīng)該要注意以下事項(xiàng):

1、RT-Thread的線程調(diào)度器是搶占式的,也就是能夠保證就緒隊(duì)列里面,最高優(yōu)先級(jí)的任務(wù)總能獲得CPU的使用權(quán),在任務(wù)設(shè)計(jì)的時(shí)候,要充分考慮好任務(wù)的優(yōu)先級(jí)。

2、在硬件中斷服務(wù)程序運(yùn)行期間,如果有高優(yōu)先級(jí)的任務(wù)就緒,那么被中斷的低優(yōu)先級(jí)任務(wù)將被掛起,高優(yōu)先級(jí)的任務(wù)將會(huì)獲得CPU的使用權(quán)。

3、每個(gè)線程都有獨(dú)立的線程棧,用來保存線程調(diào)度時(shí)上下文的信息,因此在創(chuàng)建線程分配??臻g的時(shí)候,要充分考慮棧的大小。

4、在線程的循環(huán)體里面,應(yīng)該要設(shè)置某些條件,在必要的時(shí)候主動(dòng)讓出CPU的使用權(quán),特別對(duì)于高優(yōu)先級(jí)的線程,如果程序里面有死循環(huán)操作而又不主動(dòng)讓出CPU使用權(quán),那么這個(gè)線程將會(huì)一直占用CPU,并且低優(yōu)先級(jí)的線程永遠(yuǎn)不會(huì)被調(diào)度執(zhí)行。

5、對(duì)于沒有一直循環(huán)執(zhí)行的線程,線程執(zhí)行完畢后,資源的回收情況實(shí)際上是在空閑線程里面進(jìn)行的,線程變?yōu)殛P(guān)閉狀態(tài)后,不代表資源馬上被回收。

6、系統(tǒng)空閑線程是最低優(yōu)先級(jí)且永遠(yuǎn)為就緒狀態(tài)的,空閑線程是一個(gè)死循環(huán),永遠(yuǎn)不會(huì)被掛起,但可以被其他高優(yōu)先級(jí)任務(wù)搶占,空閑線程主要執(zhí)行僵尸線程的資源回收工作。

7、空閑線程也可以設(shè)置鉤子函數(shù),用來進(jìn)行功耗管理,看門狗喂狗等工作。

8、通過動(dòng)態(tài)方式創(chuàng)建的線程,需要設(shè)置好系統(tǒng)堆內(nèi)存的大小,而通過靜態(tài)方式創(chuàng)建的線程,線程棧和線程句柄在程序編譯的時(shí)候就已經(jīng)確定,不能被動(dòng)態(tài)分配,也不能被釋放。

9、大多數(shù)線程都是在不斷循環(huán)執(zhí)行的,無需進(jìn)行刪除,一般不推薦主動(dòng)刪除線程。線程運(yùn)行完畢后,系統(tǒng)調(diào)度器將會(huì)自動(dòng)把線程加入僵尸隊(duì)列,資源回收工作將在空閑線程里面進(jìn)行。

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7280

    瀏覽量

    128264
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    279

    瀏覽量

    20856
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1514

    瀏覽量

    43991

原文標(biāo)題:【學(xué)習(xí)筆記】RT-Thread 多線程學(xué)習(xí)總結(jié)

文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    首搭RT-Thread程翧車控平臺(tái)| RT-Thread程翧 S32K344 快速原型開發(fā)平臺(tái)正式上市!| 產(chǎn)品動(dòng)態(tài)

    在智能汽車邁向高集成與高安全的時(shí)代,VCU/ECU開發(fā)正面臨效率與可靠性的雙重考驗(yàn)。依賴單一硬件或拼湊軟件方案的傳統(tǒng)模式,已成為制約創(chuàng)新的瓶頸。為此,RT-Thread帶來里程碑式的解決方案
    的頭像 發(fā)表于 10-31 11:53 ?251次閱讀
    首搭<b class='flag-5'>RT-Thread</b>程翧車控平臺(tái)| <b class='flag-5'>RT-Thread</b>程翧 S32K344 快速原型開發(fā)平臺(tái)正式上市!| 產(chǎn)品動(dòng)態(tài)

    rt-thread studio 如何進(jìn)行多線程編譯?

    使用 rt-thread studio在工程配置 C/C++構(gòu)建->Behavior->parallel build數(shù)量修改,CPU的占用率沒有明顯的改變
    發(fā)表于 10-11 09:16

    學(xué)習(xí)強(qiáng)國(guó)深度報(bào)道 RT-Thread“1+X+N”戰(zhàn)略,國(guó)產(chǎn)操作系統(tǒng)賦能高端制造引關(guān)注|媒體視角

    近日,國(guó)產(chǎn)嵌入式操作系統(tǒng)領(lǐng)軍企業(yè)RT-Thread睿賽德在工博會(huì)發(fā)布的“1+X+N”戰(zhàn)略體系,獲得了國(guó)家級(jí)權(quán)威媒體平臺(tái)“學(xué)習(xí)強(qiáng)國(guó)”的重點(diǎn)報(bào)道。該報(bào)道從產(chǎn)業(yè)高度深入剖析了RT-Thread睿賽德以自主
    的頭像 發(fā)表于 09-29 17:37 ?785次閱讀
    <b class='flag-5'>學(xué)習(xí)</b>強(qiáng)國(guó)深度報(bào)道 <b class='flag-5'>RT-Thread</b>“1+X+N”戰(zhàn)略,國(guó)產(chǎn)操作系統(tǒng)賦能高端制造引關(guān)注|媒體視角

    RT-Thread Nano移植動(dòng)態(tài)創(chuàng)建線程創(chuàng)建不了怎么解決?

    RT-Thread Nano 移植動(dòng)態(tài)創(chuàng)建線程創(chuàng)建不了,靜態(tài)可以.直接燒錄DEMO也一樣,將RT_USING_HEAP開起來,使用動(dòng)態(tài)創(chuàng)建就創(chuàng)建不起來,
    發(fā)表于 09-19 06:28

    rt-thread studio 2.2.9如何使用最新的RT-Thread v5.2.0 released?

    rt-thread studio2.2.9如何使用最新的RT-Thread v5.2.0 released? 原先以為修改index_all.json,發(fā)現(xiàn)聯(lián)網(wǎng)的時(shí)候,會(huì)自動(dòng)覆蓋 另lastet版本
    發(fā)表于 09-16 06:06

    【好書推薦】RT-Thread第20本相關(guān)書籍!《嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread原理與應(yīng)用》| 技術(shù)集結(jié)

    01內(nèi)容簡(jiǎn)介ContentSummary本書為讀者提供了一個(gè)全面、系統(tǒng)的RT-Thread學(xué)習(xí)指南,旨在幫助初學(xué)者及有經(jīng)驗(yàn)的開發(fā)者掌握RT-Thread實(shí)時(shí)操作系統(tǒng)和STM32嵌入式微控制器的核心
    的頭像 發(fā)表于 08-24 10:05 ?597次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>第20本相關(guān)書籍!《嵌入式實(shí)時(shí)操作系統(tǒng)<b class='flag-5'>RT-Thread</b>原理與應(yīng)用》| 技術(shù)集結(jié)

    如何移植 RT-Thread Nano 并創(chuàng)建 2 個(gè)線程

    基于 BSP 中的 GPIO_OutputInput 演示,展示了如何移植 RT-Thread Nano 并創(chuàng)建 2 個(gè)線程。
    發(fā)表于 08-19 07:45

    RT-Thread榮獲2025優(yōu)秀開源項(xiàng)目 | 新聞速遞

    6月底,RT-Thread睿賽德受邀參與由上海開源信息技術(shù)協(xié)會(huì)主辦的2025上海開源創(chuàng)新精英薈。上海市商委副主任張杰出席會(huì)議并致辭。RT-Thread嵌入式操作系統(tǒng)項(xiàng)目憑借其卓越的技術(shù)創(chuàng)新與開源生態(tài)
    的頭像 發(fā)表于 07-04 09:04 ?2294次閱讀
    <b class='flag-5'>RT-Thread</b>榮獲2025優(yōu)秀開源項(xiàng)目 | 新聞速遞

    深度剖析 RT-Thread 線程調(diào)度流程

    RT-Thread調(diào)度第一個(gè)線程的主要流程分如下:rtthread_startup:RTT的啟動(dòng)函數(shù),主要負(fù)責(zé)板級(jí)驅(qū)動(dòng),調(diào)度器,系統(tǒng)線程初始化,啟動(dòng)調(diào)度的工作
    的頭像 發(fā)表于 06-25 18:24 ?1300次閱讀
    深度剖析 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>線程</b>調(diào)度流程

    揭秘RT-Thread上的AUTOSAR CP系統(tǒng)

    本文探討了RT-Thread與AUTOSARCP的融合,解決車載ECU開發(fā)中實(shí)時(shí)性、安全性與靈活性的平衡問題。通過分層安全內(nèi)核(rt-safetyos/autoos)和工具鏈整合,兼容AUTOSAR
    的頭像 發(fā)表于 06-23 20:22 ?2816次閱讀
    揭秘<b class='flag-5'>RT-Thread</b>上的AUTOSAR CP系統(tǒng)

    RT-Thread Nano移植動(dòng)態(tài)創(chuàng)建線程創(chuàng)建不了怎么處理?

    RT-Thread Nano移植動(dòng)態(tài)創(chuàng)建線程創(chuàng)建不了,靜態(tài)可以.直接燒錄DEMO也一樣,將RT_USING_HEAP開起來,使用動(dòng)態(tài)創(chuàng)建就創(chuàng)建不起來,
    發(fā)表于 06-11 06:36

    RT-Thread審核團(tuán)招募: 深度參與開源RTOS社區(qū)治理與演進(jìn)

    全球開發(fā)者招募:RT-Thread審核團(tuán)(ReviewTeam)正式開放申請(qǐng)!在開源的世界里,代碼審查(CodeReview)是保證軟件質(zhì)量、促進(jìn)技術(shù)交流的關(guān)鍵環(huán)節(jié)。RT-Thread作為全球領(lǐng)先
    的頭像 發(fā)表于 05-21 18:02 ?981次閱讀
    <b class='flag-5'>RT-Thread</b>審核團(tuán)招募: 深度參與開源RTOS社區(qū)治理與演進(jìn)

    請(qǐng)問rt-thread studio如何進(jìn)行多線程編譯?

    使用 rt-thread studio 在工程配置 C/C++構(gòu)建->Behavior->parallel build 數(shù)量修改,CPU的占用率沒有明顯的改變
    發(fā)表于 02-19 08:30

    如何將RT-Thread移植到NXP MCUXPressoIDE上

    RT-Thread默認(rèn)支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植到NXP MCUXPressoIDE上呢?本文內(nèi)容比較簡(jiǎn)單但稍有瑣碎,希望對(duì)有需要的小伙伴有所幫助。
    的頭像 發(fā)表于 02-13 10:37 ?2300次閱讀
    如何將<b class='flag-5'>RT-Thread</b>移植到NXP MCUXPressoIDE上

    RT-Thread上CAN實(shí)踐

    開箱測(cè)試RT-Thread官方已完成了對(duì)英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進(jìn)行RT-ThreadCan移植。接下來我們要完成CAN_FD的驅(qū)動(dòng)移植,并正常啟動(dòng)RT-T
    的頭像 發(fā)表于 11-13 01:03 ?2696次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實(shí)踐