大家好,很高興和各位一起分享我的文章,喜歡和支持我的工程師,一定記得給我點贊、收藏、分享。
加微信[xyzn3333]與作者溝通交流,免費獲取更多單片機與嵌入式的海量電子資料。
在嵌入式領域中,嵌入式實時操作系統正得到越來越廣泛的應用。采用嵌入式實時操作系統(RTOS)可以更合理、更有效地利用 CPU 的資源,簡化應用軟件的設計,縮短系統開發時間,更好地保證系統的實時性和可靠性。本文我們對嵌入式實時操作系統進行經典三問:what?when?how?因此,以下是嵌入式設計需要RTOS解決方案的時間和原因。但在此之前,RTOS到底是什么,尤其是與裸機解決方案相比?
一:什么是嵌入式實時操作系統(RTOS)?
RTOS是一種操作系統,旨在管理嵌入式系統的硬件資源;它創建了多個軟件執行線程和一個調度程序來管理這些線程。另一種說法是一個調度內核,它創建了一個多任務和確定性的運行時環境。
RTOS與無操作系統的“前后臺”設計的最本質區別是任務調度器的設計,調度器可以為正在運行的任務分配精確且可重復的時間段的能力,
二:什么時候需要用RTOS?
當有更多中斷源、更多功能和更多通信接口時,通常使用RTOS。簡而言之,應用程序的復雜性在很大程度上決定了為MCU定制的RTO的使用。
剛開始學單片機,基本都是從裸機開始,經典的“項目”就是流水燈,也是你學習單片機的開始。但是隨著學習的不斷深入,裸機所暴露的問題就越來越多,這里我給大家總結下吧:1、并發性:程序并發工作效率低在寫裸機軟件時,不可避免的在主程序中會有一個超級大的 while(1) 循環,這里面幾乎包含整個項目的所有業務邏輯。因為每個業務邏輯里面基本都會有 delay 這樣的循環等待函數,這樣導致了所有的業務邏輯幾乎都是串行起來工作的。這個時候 CPU 就會有很多時間都浪費在了延時函數里,一直在空轉,導致軟件的并發效率非常差。2、模塊化:高內聚,低耦合的原則從軟件工程的角度,我們在做軟件開發時,都會強調高內聚、低耦合的原則。而裸機的模塊化開發難度非常大,模塊間的耦合較重,這也導致了無法在大型項目使用裸機來開發。還是剛才 main 函數中大 while(1) 的例子,可以想象到那么多功能都緊緊的擠在一個函數里,不可拆分,模塊化開發的困難重重。舉一個非常貼切的例子,在一些使用看門狗的項目中,如果使用 delay 延時函數,那得注意點,萬一延時過長,主函數來不及喂狗,看門狗就被觸發了。最后會產生這樣一種感覺,一個簡簡單單的 delay 還得考慮喂狗功能,裸機開發時操的心太多了,自然無法應用在大型項目中。3、生態:很多高級軟件組件,必須依賴于操作系統來實現比如說,前些年一個基于 FreeModbus 的 Modbus 主機協議棧,因為要考慮各個平臺適配問題,原本計劃支持各種各樣的操作系統,甚至是裸機平臺。在各個操作系統上的適配都非常容易,但再去嘗試著適配裸機時,發現難度重重,有一些函數在裸機上實現起來非常復雜,而且針對于不同的裸機環境,幾乎沒有通用性可言,太耗費精力了。所以我最終就放棄了裸機適配,一直到現在,在裸機上都沒用這個 Modbus 主機協議棧。還有一些軟件無法運行在裸機上,比如:樂鑫,Realtek、 ti 和 聯發科 提供的 WIFi SOC SDK ,一些藍牙 SOC 的 SDK 也都是只支持操作系統。所以,如果你不了解、不會使用操作系統,這些芯片也就玩不轉了。4、實時性:功能復雜的情況下,實時性無法保證軟件的實時性在一些領域會有一定的要求,軟件的每個步驟必須在指定的時間被觸發。工控領域就是最常見到的場景,如果實時性無法保證,機械設備可能就無法按照指定時序要求去動作,以至于發生機械事故,甚至會威脅到人的生命。回過來接著看裸機軟件,如果軟件變得龐大以后,可以想象到,主程序中那么大的一個 while(1) 循環,代碼耦合嚴重,到處都是 delay 延時,要保證實時性幾乎是不可能的。5、可重用性:軟件可重用性差,總是重復造輪子可重用性與模塊化程度有直接的關系。相信大家每個人在工作中都不想做很多重復性的工作,同樣在寫代碼時,也想著盡可能少寫一些功能相似的代碼。但在這個嵌入式碎片化極其嚴重的時代,各式各樣的芯片,想要讓同樣的代碼,在裸機環境下同時適配不同的硬件,難度非常大。這樣也就導致了裸機的代碼會過多的依賴于底層硬件,重復造輪子的過程也就不可避免。
三:選擇RTOS需要考慮的因素
現在開源或不開源的RTOS非常多,當我們選擇具體使用哪個RTOS時主要需要考慮哪些因素呢?響應性:RTOS調度算法、中斷延遲和上下文切換時間將顯著定義系統的響應性和確定性。最重要的考慮是需要什么類型的響應——是否需要硬實時響應?這意味著有精確定義的最后期限,如果不滿足,將導致系統失敗。或者,非確定性的軟實時響應是否合適?在這種情況下,無法保證每項任務何時完成。可用系統資源:微內核使用最少的系統資源,并提供有限但必不可少的任務調度功能。微內核通常提供硬實時響應,廣泛用于RAM/ROM容量有限的嵌入式微處理器,但也適用于較大的嵌入式處理器系統。或者,可以使用Linux或WinCE等功能齊全的操作系統。它們提供了功能豐富的操作系統環境,通常隨驅動程序、GUI和中間件組件一起提供。與微內核相比,功能齊全的操作系統通常響應速度較慢,需要更多的內存和處理能力,主要用于系統資源豐富的強大嵌入式處理器上。開源或專業許可:有廣泛使用的、免費的開源RTOS可用,在GPL或修改的GPL許可下分發。然而,這些許可證可能包含保留拷貝的限制,提供的保護很少。專業授權的RTOS產品取消了版權限制,提供完整的知識產權侵權賠償和擔保。此外,只有一家公司提供支持,并對產品質量負責。質量:RTOS供應商在其組織內對質量的重視程度如何?質量不僅僅是編碼標準。是否有正確的程序來保證未來產品和支持的質量?管理良好、重視質量的公司往往通過ISO 9001認證。安全認證:預認證和可認證RTO可用于需要按照國際設計標準(如DO-178C和IEC 61508)認證的應用。這些RTO提供了關鍵的安全特性,以及認證機構要求的設計證據,以確認用于開發RTO的過程符合相關設計標準。許可證:它不僅是您需要考慮的RTOS功能和特性,而且是對您的項目預算和公司的“投資回報”最有效的許可模式。RTOS供應商:RTOS背后的公司與選擇正確的RTOS本身一樣重要。理想情況下,您希望與供應商建立關系,不僅支持您當前的產品,而且支持您未來的產品。要做到這一點,你需要選擇一個具有良好聲譽的積極主動的供應商,與領先的硅制造商合作,確保他們能夠支持最新的處理器和工具。信任、產品質量和支持質量是一切。