<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 業(yè)界動(dòng)態(tài) > 嵌入式開(kāi)發(fā):使用RTOS的7個(gè)技巧

嵌入式開(kāi)發(fā):使用RTOS的7個(gè)技巧

作者: 時(shí)間:2022-11-02 來(lái)源:學(xué)習嵌入式 收藏

  實(shí)時(shí)操作系統已經(jīng)成為許多系統中的關(guān)鍵組件,從裸機調度過(guò)渡到可能是一件棘手的事情。這里有七個(gè)小技巧可以幫助開(kāi)發(fā)人員更輕松地完成過(guò)渡。

本文引用地址:http://dyxdggzs.com/article/202211/439889.htm



  技巧1——首先規劃好你的架構



  如果你從未使用過(guò)UML或者對軟件架構不感興趣,現在是時(shí)候學(xué)習一下了。使用時(shí),開(kāi)發(fā)人員仔細考慮每項任務(wù)、同步和通信機制是至關(guān)重要的。這些細節不能僅僅存儲在工程師的頭腦中,而是需要以圖表的形式記錄下來(lái),以便在需要時(shí)可以查看和更新。開(kāi)發(fā)一個(gè)基于的應用程序會(huì )很快變得復雜,考慮清楚應用程序的行為是很重要的。



  技巧2——仔細跟蹤內存使用情況



  與開(kāi)發(fā)裸機應用程序不同,RTOS任務(wù)和同步結構會(huì )很快耗盡資源受限設備中的內存。開(kāi)發(fā)人員需要非常小心地監控內存,并跟蹤內存的去向。創(chuàng )建六個(gè)任務(wù)、幾個(gè)信號量和互斥體,卻發(fā)現malloc因為所有堆空間都已被使用而失敗,這種情況并不罕見(jiàn)。



  技巧3——預先創(chuàng )建所有的任務(wù)



  RTOS為開(kāi)發(fā)人員提供了廣泛的功能,例如創(chuàng )建任務(wù)和銷(xiāo)毀任務(wù)的能力。關(guān)心內存使用的開(kāi)發(fā)人員可能傾向于只在需要時(shí)創(chuàng )建任務(wù),然后在任務(wù)完成后銷(xiāo)毀它們。雖然這在概念上很棒,但在資源受限的系統中,通常沒(méi)有復雜的堆管理器可以處理堆碎片。結果可能是一個(gè)碎片堆,在程序執行過(guò)程中的某個(gè)時(shí)刻突然沒(méi)有內存可以分配。建議在系統初始化期間創(chuàng )建所有使用堆的對象。結果似乎是靜態(tài)分配的對象,如果存在內存問(wèn)題,該問(wèn)題將在系統啟動(dòng)時(shí)顯現出來(lái)。



  技巧 4–永遠不要關(guān)閉堆棧保護!



  裸機開(kāi)發(fā)者通常癡迷于編寫(xiě)盡可能高效的代碼。意識到存在使用時(shí)鐘周期的堆棧監視器成為優(yōu)化和移除的誘人目標。不要這樣做!堆棧監視器用于檢測堆棧溢出和其他與堆棧相關(guān)的問(wèn)題。雖然它確實(shí)使用了幾個(gè)時(shí)鐘周期,但好處遠遠超過(guò)了性能成本。




  技巧5——優(yōu)化每個(gè)任務(wù)堆棧



  不要依賴(lài)默認的堆棧大小。在許多RTOSes中,任務(wù)的默認堆棧大小大約是0x200。這通常是堆棧深度,而不是使用的字節數!僅僅是一個(gè)閃爍的LED的任務(wù)就可能使用了整整千字節的堆空間!嵌入式開(kāi)發(fā)人員確保執行最壞情況堆棧分析,并適當地確定每個(gè)任務(wù)堆棧的大小。從長(cháng)遠來(lái)看,這將有助于節省內存!



  技巧 6–啟用RTOS感知調試



  現代微控制器有一些非??岬恼{試功能,如實(shí)時(shí)跟蹤和RTOS感知調試。在微控制器和RTOS中啟用這些功能。它們將允許開(kāi)發(fā)人員跟蹤哪些任務(wù)運行了多長(cháng)時(shí)間,以什么順序運行,并且可以幫助識別許多與RTOS相關(guān)的常見(jiàn)問(wèn)題。



  技巧7——仔細選擇任務(wù)優(yōu)先級



  預先開(kāi)發(fā)一個(gè)軟件非常有用的一個(gè)原因是,它提供了系統中發(fā)生的所有事情的大畫(huà)面。有了這個(gè)大圖,決定系統中每個(gè)任務(wù)的優(yōu)先級就變得更容易了。必須仔細選擇優(yōu)先級,以確保任務(wù)不會(huì )耗盡CPU時(shí)間,并確保系統中不會(huì )出現優(yōu)先級反轉等問(wèn)題。



  結論



  使用RTOS對嵌入式開(kāi)發(fā)人員來(lái)說(shuō)是非常有益的,并且有助于加快開(kāi)發(fā)周期。許多中間件、庫和框架依賴(lài)于RTOS,在當今物聯(lián)網(wǎng)設備的大力推動(dòng)下,裸機已經(jīng)過(guò)時(shí),掌握RTOS是強制性的。




關(guān)鍵詞: RTOS 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>