在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

RT-Thread多線程學習后的總結(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 ? 次閱讀

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

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

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

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

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

什么是多線程?

單片機上學習RT-Thread的多線程之前,要先把“進程”這個概念先放一邊,因為單片機是沒有多進程概念的。單片機運行操作系統(tǒng),不管多少個任務,他們都是多個(或單個)線程之間進行處理這些任務,單片機一般不涉及多進程。

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

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

因為單片機做這三件事情的時候,是Step by Step的,必須完成一件事情之后,再去做下一件事情,這三件事情是有先后順序的,并且不斷循環(huán)重復,如下圖所示。

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

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

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

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

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

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

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

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

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

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

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

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

多線程的API函數(shù)

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

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

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

多線程的應用示例

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

示例源碼下載鏈接:

https://github.com/embediot/rtthread_study_notes

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

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

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

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

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

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

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

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

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

多線程應用的注意事項

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

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

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

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

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

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

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

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

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

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

責任編輯:lq

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

    關(guān)注

    37

    文章

    7103

    瀏覽量

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

    關(guān)注

    0

    文章

    279

    瀏覽量

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

    關(guān)注

    32

    文章

    1372

    瀏覽量

    41557

原文標題:【學習筆記】RT-Thread 多線程學習總結(jié)

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

收藏 人收藏

    評論

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

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

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

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

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

    請問rt-thread studio如何進行多線程編譯?

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

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

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

    RT-Thread上CAN實踐

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

    【S32K146 RT-thread】之 SPI驅(qū)動適配

    概述RT-Thread對SPI總線的驅(qū)動,抽象出了spibus的設(shè)備驅(qū)動,我們基于S32K146的硬件學習spibus設(shè)備驅(qū)動。
    的頭像 發(fā)表于 11-01 08:11 ?1213次閱讀
    【S32K146 <b class='flag-5'>RT-thread</b>】之 SPI驅(qū)動適配

    開源共生 商業(yè)共贏 | RT-Thread 2024開發(fā)者大會報名啟動!

    親愛的RT-Thread開發(fā)者我們很高興地宣布,一年一度的RDC(RT-ThreadDeveloperConference,RT-Thread開發(fā)者大會)正式啟動報名!2024RT-Threa
    的頭像 發(fā)表于 10-29 08:06 ?877次閱讀
    開源共生 商業(yè)共贏 | <b class='flag-5'>RT-Thread</b> 2024開發(fā)者大會報名啟動!

    【成都】9月21日RT-Thread巡回線下培訓-OpenMV機器視覺

    親愛的RT-Thread社區(qū)成員們:RT-Thread24年全球巡回培訓將覆蓋超10座城市及國家,為開發(fā)者提供一個深入學習RT-Thread嵌入式開發(fā),以及和工程師們線下交流的絕佳機會
    的頭像 發(fā)表于 09-13 08:09 ?1439次閱讀
    【成都】9月21日<b class='flag-5'>RT-Thread</b>巡回線下培訓-OpenMV機器視覺

    【大連】9月7日RT-Thread巡回線下培訓-OpenMV機器視覺

    親愛的RT-Thread社區(qū)成員們:2024年RT-Thread全球開發(fā)者線下培訓拉開帷幕啦!24年全球巡回培訓將覆蓋超10座城市及國家,為開發(fā)者提供一個深入學習RT-Thread嵌入
    的頭像 發(fā)表于 09-01 08:02 ?3106次閱讀
    【大連】9月7日<b class='flag-5'>RT-Thread</b>巡回線下培訓-OpenMV機器視覺

    【武漢】9月7日RT-Thread巡回線下培訓-RTduino-10分鐘上手嵌入式

    親愛的RT-Thread社區(qū)成員們:2024年RT-Thread全球開發(fā)者線下培訓拉開帷幕啦!24年全球巡回培訓將覆蓋超10座城市及國家,為開發(fā)者提供一個深入學習RT-Thread嵌入
    的頭像 發(fā)表于 08-31 08:05 ?709次閱讀
    【武漢】9月7日<b class='flag-5'>RT-Thread</b>巡回線下培訓-RTduino-10分鐘上手嵌入式

    【QEMU系列】不用開發(fā)板運行RT-Thread指南-ARM架構(gòu)

    成為一個門檻。本文將詳細介紹如何在QEMU虛擬機的Vexpress-A9平臺上運行RT-Thread,幫助開發(fā)者在沒有實際硬件開發(fā)板的情況下,輕松體驗和學習RT-Th
    的頭像 發(fā)表于 08-09 08:35 ?1471次閱讀
    【QEMU系列】不用開發(fā)板運行<b class='flag-5'>RT-Thread</b>指南-ARM架構(gòu)

    2024 RT-Thread全球巡回 線下培訓火熱來襲!

    親愛的RT-Thread社區(qū)成員們:我們非常高興地宣布,2024年RT-Thread全球開發(fā)者線下培訓即將拉開帷幕!24年全球巡回培訓將覆蓋超10座城市及國家,為開發(fā)者提供一個深入學習RT-T
    的頭像 發(fā)表于 08-07 08:35 ?2469次閱讀
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓火熱來襲!

    【好書推薦】RT-Thread設(shè)備驅(qū)動開發(fā)指南

    近年來國內(nèi)芯片產(chǎn)業(yè)和物聯(lián)網(wǎng)產(chǎn)業(yè)的快速崛起,行業(yè)發(fā)展迫切需要更多人才,尤其需要掌握嵌入式操作系統(tǒng)等底層技術(shù)的人才。隨著RT-Thread被更廣泛地應用于行業(yè)中,開發(fā)者對嵌入式驅(qū)動開發(fā)的需求越來越
    的頭像 發(fā)表于 08-01 08:35 ?1186次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>設(shè)備驅(qū)動開發(fā)指南

    RT-Thread 新里程碑達成——GitHub Star 破萬!

    RT-Thread實時操作系統(tǒng)開源項目在GitHub上的star數(shù)量突破一萬!截止發(fā)文,RT-Thread作為實時操作系統(tǒng)在業(yè)界Star數(shù)量排名第一!倉庫地址:https://github.com
    的頭像 發(fā)表于 07-04 08:35 ?716次閱讀
    <b class='flag-5'>RT-Thread</b> 新里程碑達成——GitHub Star 破萬!

    基于 RT-Thread專業(yè)版的EtherCAT主站方案

    (一)方案介紹本方案基于RT-Thread專業(yè)版,在RT-Thread端集成EtherCAT主站協(xié)議,通過EtherCAT對伺服電機或遠程IO進行實時控制,具備傳輸速度快,實時性高,擴展設(shè)備靈活等
    的頭像 發(fā)表于 06-19 08:35 ?1727次閱讀
    基于 <b class='flag-5'>RT-Thread</b>專業(yè)版的EtherCAT主站方案
    主站蜘蛛池模板: 中文字幕在线一区二区三区 | 久久婷婷色综合老司机 | 性欧美大战久久久久久久 | 国产肥女bbwbbw | 伊人97| 高清不卡日本v在线二区 | 欧美精品一区视频 | 四虎国产欧美成人影院 | 久操视频免费看 | jiucao视频在线观看 | 欧美一级特黄高清免费 | 午夜黄页网站在线播放 | 李老汉和小花的性生生活 | 色依依视频视频在线观看 | 激情婷婷丁香 | 欧美一级欧美三级在线 | 久久三级国产 | 国产91色综合久久免费分享 | 你懂的视频在线观看资源 | 黄色大片毛片 | 色激情综合网 | 色橹橹 | 免费一级毛片私人影院a行 免费一级毛片无毒不卡 | ts视频在线观看 | 性欧美在线 | 亚洲 欧美 日韩 综合 | 色天使美国 | 午夜在线看片 | 夜夜天天操 | 国产三级自拍视频 | 亚洲欧美日本综合 | 女人张开双腿让男人桶完整 | 一区二区三区精品国产欧美 | 二级黄色大片 | 成人影院久久久久久影院 | 美女视频一区二区三区 | 亚洲男人精品 | 在线天堂资源www中文在线 | 在线资源你懂的 | 午夜嘿嘿嘿 | 在线免费观看一级片 |