国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

RT-Thread多線程學習后的總結

RTThread物聯網操作系統 ? 來源:RTThread物聯網操作系統 ? 作者:RTThread物聯網操作 ? 2021-01-13 16:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

什么是多線程?

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

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

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

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

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

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

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

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

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

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

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

多線程的幾種狀態

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

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

關于這五種線程狀態的描述,如下表所示:

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

多線程的API函數

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

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

上下滑動查看 API 函數

多線程的應用示例

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

示例源碼下載鏈接:

https://github.com/embediot/rtthread_study_notes

1、線程動態創建與靜態創建、線程退出示例。

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

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

2、相同優先級線程的時間片輪轉調度示例。

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

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

3、線程調度器的鉤子函數使用示例。

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

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

多線程應用的注意事項

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

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

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

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

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

5、對于沒有一直循環執行的線程,線程執行完畢后,資源的回收情況實際上是在空閑線程里面進行的,線程變為關閉狀態后,不代表資源馬上被回收。

6、系統空閑線程是最低優先級且永遠為就緒狀態的,空閑線程是一個死循環,永遠不會被掛起,但可以被其他高優先級任務搶占,空閑線程主要執行僵尸線程的資源回收工作。

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

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

9、大多數線程都是在不斷循環執行的,無需進行刪除,一般不推薦主動刪除線程。線程運行完畢后,系統調度器將會自動把線程加入僵尸隊列,資源回收工作將在空閑線程里面進行。

責任編輯:lq

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

    關注

    37

    文章

    7402

    瀏覽量

    129311
  • 多線程
    +關注

    關注

    0

    文章

    279

    瀏覽量

    21030
  • RT-Thread
    +關注

    關注

    32

    文章

    1614

    瀏覽量

    44881

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

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    恩智浦亮相RT-Thread 20周年開發者大會

    日前,“開源向實·生產力進化啟示錄”全球峰會暨RT-Thread 20周年開發者大會在上海成功舉辦,恩智浦作為RT-Thread的緊密合作伙伴,在活動中重磅亮相,展示雙方在共建RT-Thread OS開發生態方面的新成果、新方案
    的頭像 發表于 01-26 09:07 ?557次閱讀

    基于RT-Thread的簡單物聯網溫控箱 | 技術集結

    接入網絡,配套了功能完善的Web可視化監控和調參Dashboard,實現了完整的物聯網閉環。整個項目充分利用了RT-Thread多線程、設備驅動框架和網絡組件的能力
    的頭像 發表于 12-26 18:18 ?7263次閱讀
    基于<b class='flag-5'>RT-Thread</b>的簡單物聯網溫控箱 | 技術集結

    首搭RT-Thread程翧車控平臺| RT-Thread程翧 S32K344 快速原型開發平臺正式上市!| 產品動態

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

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

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

    學習強國深度報道 RT-Thread“1+X+N”戰略,國產操作系統賦能高端制造引關注|媒體視角

    近日,國產嵌入式操作系統領軍企業RT-Thread睿賽德在工博會發布的“1+X+N”戰略體系,獲得了國家級權威媒體平臺“學習強國”的重點報道。該報道從產業高度深入剖析了RT-Thread睿賽德以自主
    的頭像 發表于 09-29 17:37 ?1206次閱讀
    <b class='flag-5'>學習</b>強國深度報道 <b class='flag-5'>RT-Thread</b>“1+X+N”戰略,國產操作系統賦能高端制造引關注|媒體視角

    如何使用rt-thread studio中,使用 定制化的SDK建立工程?

    步驟: rt-thread bsp n32 n32l40xcl-stb scons --target=eclipse 再 Scons –dist 生成 dist 目錄 進入目錄 再 scons
    發表于 09-26 06:16

    RT-Thread Nano移植動態創建線程創建不了怎么解決?

    RT-Thread Nano 移植動態創建線程創建不了,靜態可以.直接燒錄DEMO也一樣,將RT_USING_HEAP開起來,使用動態創建就創建不起來,
    發表于 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,發現聯網的時候,會自動覆蓋 另lastet版本
    發表于 09-16 06:06

    【好書推薦】RT-Thread第20本相關書籍!《嵌入式實時操作系統RT-Thread原理與應用》| 技術集結

    01內容簡介ContentSummary本書為讀者提供了一個全面、系統的RT-Thread學習指南,旨在幫助初學者及有經驗的開發者掌握RT-Thread實時操作系統和STM32嵌入式微控制器的核心
    的頭像 發表于 08-24 10:05 ?1032次閱讀
    【好書推薦】<b class='flag-5'>RT-Thread</b>第20本相關書籍!《嵌入式實時操作系統<b class='flag-5'>RT-Thread</b>原理與應用》| 技術集結

    如何移植 RT-Thread Nano 并創建 2 個線程

    基于 BSP 中的 GPIO_OutputInput 演示,展示了如何移植 RT-Thread Nano 并創建 2 個線程
    發表于 08-19 07:45

    RT-Thread榮獲2025優秀開源項目 | 新聞速遞

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

    深度剖析 RT-Thread 線程調度流程

    RT-Thread調度第一個線程的主要流程分如下:rtthread_startup:RTT的啟動函數,主要負責板級驅動,調度器,系統線程初始化,啟動調度的工作
    的頭像 發表于 06-25 18:24 ?1771次閱讀
    深度剖析 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>線程</b>調度流程

    揭秘RT-Thread上的AUTOSAR CP系統

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

    RT-Thread Nano移植動態創建線程創建不了怎么處理?

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

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

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