“从0开始的FreeRTOS”系列教程第一讲
大家好,這次給大家帶來了Freertos的教程,這次打算一口氣做完一整個系列的教程,大概更新頻率會是月更
這個系列的教程的主要目的是帶大家了解實時系統(real time operating system)的基本概念,熟悉freertos的api使用方法,具備基本的使用rtos進行工程開發的能力
系列計劃分幾期錄完,內容分別為
- 任務管理
- 隊列管理
- 軟件定時器管理
- 中斷管理
- 資源管理
- 事件組
- 任務通知
本教程的開發環境:
- 硬件環境
stm32f103ZET6 - 軟件版本
Keil MDK 5.23
CubeMX 4.17 - 軟件庫環境
HAL庫版本1.13.0
FreeRTOS版本9.0
我們這節課主要解決兩個問題:
第一個問題:什么是RTOS(Real time operating system 實時操作系統),在回答這個問題之前,我們先說明白什么是OS(Operating system 操作系統)。
我們正常使用電腦時感覺和使用單片機有很大的差距,在單片機上,我們可以直接調用IO,中斷這些硬件功能,但是在電腦時,我們只能夠通過一些應用程序與計算機進行交互。
這是因為我們在操作單片機時是在直接和單片機的硬件進行交互,而在使用電腦的時候,實際上我們是和操作系統進行交互,然后操作系統再幫我們完成和硬件交互的過程,用專業一點的方法來說,就是操作系統區分了用戶態和內核態,涉及硬件的操作,只能在內核態下由操作系統進行訪問,而用戶則只能在用戶態進行操作。
操作系統本身就像套在硬件外面的一層殼一樣,我們用戶再在操作系統的外層進行用戶應用的開發,用戶應用通過操作系統去操作硬件。
而實時操作系統也是操作系統的一種。
實時操作系統相比一般的操作系統會更加強調實時性,相比我們平時使用的操作系統更加注重及時響應用戶的輸入,實時操作系統的重點是在外界時間或者數據產生時,能夠快速接收和處理,處理的結果又能在規定的時間做出響應。
實時操作系統一般用在工業控制,軍事設備,航空航天這些對實時性要求強的場景中。
在stm32開發時,我們一般會采取裸機開發的方式,所謂裸機是指我們一般的輪詢+中斷的工程代碼構筑方式,我們能夠實現比較復雜的任務的手段主要是通過中斷優先級和中斷嵌套。而且這些工作的完成是依賴于nvic寄存器,也就是完全以硬件的方式完成的。
但我們也可以通過freertos這樣的實時操作系統進行開發,也就是我們創建一些用戶進程,由操作系統根據我們之前設定好的需求對進程的運行進行管理,這是一種通過軟件對任務進行調度的方式。
當然,我們上面講的并不是操作系統的全部,實際上操作系統的歷史發展和多道程序設計技術密切相關,但這些不是我們這里的重點了
第二個問題,為什么要用rtos:
使用rtos最大的優勢是避免由于不定長中斷引發的問題,在傳統的裸機開發時,有的時候會因為過長等待一個中斷的觸發,或者過長時間處理一個中斷,導致整個系統發生了混亂乃至于崩潰。
而在rtos中,我們可以通過靈活的調度機制避免這種問題
另外RTOS會給每個任務分配固定的任務棧,并在發生棧溢出時進行處理,避免了由于棧溢出導致系統崩潰的風險
此外使用rtos還有便于實現軟件接口等一些優勢,比如在移植工程時,如果是裸機開發,我們就要重新配置中斷,而如果是rtos,我們直接將用戶進程拷貝過來就能使用了,免去了重新進行硬件配置的麻煩
最后,在非常復雜的大工程,以至于完全基于中斷進行設計幾乎不可能時,使用rtos進行任務調度會是很好的選擇
我們這次教程要介紹的FreeRTOS就是RTOS的一種,其他比較常見的還有uCOSⅡ,eCos,都江堰等實時操作系統,FreeRTOS正如其名,是一個’free’的rtos,它的源碼和文檔可以免費從官網上面獲取。
選擇FreeRTOS作為我們這次教程講解的對象,一方面是因為可以通過CubeMX很輕松的生成一個包含FreeRTOS的32工程。另一方面,FreeRTOS已經是一個應用范圍很廣,占有率很高,社區很龐大的實時操作系統了。
在下一期教程里,我會給大家介紹一下freertos的源碼結構,用cubemx生成包含freertos的工程的方法,以及工程的組件。
總結
以上是生活随笔為你收集整理的“从0开始的FreeRTOS”系列教程第一讲的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常见端口号和对应协议
- 下一篇: 程序中的科学计数法