引言
本文詳細介紹如何移植FreeRTOS到STM32單片機上。移植操作系統(tǒng)是嵌入式開發(fā)的入門基礎(chǔ),單片機和嵌入式在物理上其實是一摸一樣的,區(qū)別就是軟件上嵌入式跑了操作系統(tǒng)而單片機沒有。本文選用市場上最常見的STM32和FreeRTOS,為大家介紹如何移植操作系統(tǒng)到MCU上。
介紹
什么是 RTOS?
實時操作系統(tǒng)(Real-time operating system, RTOS),它會按照排序運行、管理系統(tǒng)資源,并為開發(fā)應(yīng)用程序提供一致的基礎(chǔ)。
實時操作系統(tǒng)與一般的操作系統(tǒng)相比,最大的特色就是“實時性”,如果有一個任務(wù)需要執(zhí)行,實時操作系統(tǒng)會馬上(在較短時間內(nèi))執(zhí)行該任務(wù),不會有較長的延時。這種特性保證了各個任務(wù)的及時執(zhí)行。
只有“實時性”才是RTOS的最大特征,其它的都不算是。
實時運算是計算機科學(xué)中對受到“實時約束”的計算機硬件和計算機軟件系統(tǒng)的研究,實時約束像是從事件發(fā)生到系統(tǒng)回應(yīng)之間的最長時間限制。實時程序必須保證在嚴格的時間限制內(nèi)響應(yīng)。
實時操作系統(tǒng)中都要包含一個實時任務(wù)調(diào)度器,這個任務(wù)調(diào)度器與其它操作系統(tǒng)的最大不同是強調(diào):嚴格按照優(yōu)先級來分配CPU時間,并且時間片輪轉(zhuǎn)不是實時調(diào)度器的一個必選項。
提出實時操作系統(tǒng)的概念,可以至少解決兩個問題:一個是早期的CPU任務(wù)切換的開銷太大,實時調(diào)度器可以避免任務(wù)頻繁切換導(dǎo)致CPU時間的浪費;另一個是在一些特殊的應(yīng)用場景中,必須要保證重要的任務(wù)優(yōu)先被執(zhí)行。
在這樣的背景下,實時操作系統(tǒng)就被設(shè)計出來了,典型的實時操作系統(tǒng)有FreeRTOS、VxWorks,RT-Thread,uCOS,QNX,WinCE等。
由于設(shè)備性能的發(fā)展,原來很多實時性要求高的場景,已經(jīng)切換到普通的操作系統(tǒng)了。Linux在嵌入式設(shè)備上的推廣,使用實時操作系統(tǒng)的很多設(shè)備已經(jīng)改用Linux了,因為硬件性能的提升會讓系統(tǒng)延遲降低到一個用戶可以接受的程度。
但在某些特定的場景下,比如工業(yè)自動化、機器人、航空航天、軍工領(lǐng)域等,仍然對實時操作系統(tǒng)有需求,并且應(yīng)該會長期存在。
為什么嵌入式設(shè)備往往使用RTOS?
由于嵌入式設(shè)備對資源,功耗很敏感,所以RTOS也具備可裁剪、低功耗、資源占用率低等特點。相對于通用的分時操作系統(tǒng),如linux,Windows而言,RTOS更強調(diào)實時。
RTOS保證了在規(guī)定時間內(nèi)能夠完成某個任務(wù),如果不能在指定時間完成會造成重大事故,所以必須某些場景必須使用RTOS。
FreeRTOS
FreeRTOS應(yīng)該算是目前最流行的嵌入式操作系統(tǒng)之一,具體原因當然是因為開源,畢竟產(chǎn)品還是要控制成本的。FreeRTOS 十分的小巧,可以在資源有限的微控制器中運行,我們學(xué)習(xí)中最常用的STM32F103C8T6跑很多RTOS都可能因為內(nèi)存受限,但FreeRTOS就不會,完全能滿足我們?nèi)粘5拈_發(fā)需求。當然了,F(xiàn)reeRTOS 不僅局限于在微控制器中使用。但從文件數(shù)量上來看 FreeRTOS 要比UCOSII 和 UCOSIII 小的多。
FreeRTOS最開始網(wǎng)站是全英的,我剛?cè)腴T的時候因為英語不好,飽受折磨。現(xiàn)在網(wǎng)站已經(jīng)能切換中文了,算是方便了后面學(xué)習(xí)的人。
具體步驟
- 首先準備一個基礎(chǔ)項目,我們的點燈或者串口收發(fā)這種簡單的程序就行,甚至連點燈都沒有的項目也可以。畢竟操作系統(tǒng)也要依托于一個MCU的項目。
- 獲取FreeRTOS系統(tǒng)源碼,兩種方法。
-
公眾號:物聯(lián)網(wǎng)知識,后臺回復(fù):FreeRTOS源碼
-
CSDN資源平臺:
https://download.csdn.net/download/qq_44629109/87354102
-
官網(wǎng)下載:https://www.freertos.org/zh-cn-cmn-s/
- 解壓我們下載的文件,我們進入FreeRTOSv202112.00,之后進入FreeRTOS,再后進入吧Source文件。一會我們需要用到的文件主要就在這里。
- 我們在我們準備的項目中創(chuàng)建一個文件夾FreeRTOS,將上面一步的文件中的內(nèi)容復(fù)制到剛創(chuàng)建的FreeRTOS中。
- 進行剪裁,portable 文件夾,我們只需要留下 keil、MemMang 和 RVDS這三個文件夾,其他的都可以刪除掉。
- 向工程分組中添加文件,創(chuàng)建兩個組,分別是FreeRTOS_CORE和FreeRTOS_Portable。
將FreeRTOS相關(guān)的文件添加進來。
port.c 是 RVDS 文件夾下的 ARM_CM3 中的文件,因為 STM32F103 是 Cortex-M3 內(nèi)核的,因此要選擇 ARM_CM3中的 port.c 文件。heap_4.c 是 MemMang 文件夾中的。
- 添加頭文件,我們將FreeRTOS相關(guān)的頭文件添加進項目。
- 頭文件路徑添加完成以后編譯一下,看看有沒有什么錯誤,結(jié)果會發(fā)現(xiàn)提示打不開“FreeRTOSConfig.h”這個文件,因為我們還沒添加這個文件。這個文件最好是自己編寫,當然官方也給我提供了一些例程。打開我們最開始下載的FreeRTOS源碼,里面的Deme文件夾中有一個CORTEX_STM32F103_Keil文件夾,我們可以看到,里面是有這個.h文件的。
我們把這個文件復(fù)制粘貼放進我們的項目中存放頭文件的文件夾即可。FreeRTOSConfig.h是剪裁RTOS的關(guān)鍵,后面的學(xué)習(xí)中,還會涉及到,讀者也可以在網(wǎng)上查一查相關(guān)內(nèi)容。
- 我們編譯一下我們的項目,看看是否出現(xiàn)錯誤,如果出現(xiàn)錯誤就按照錯誤改正就好了,一般情況下不會出現(xiàn)什么錯誤,如果有錯,絕大多數(shù)都是因為FreeRTOSConfig.h的配置問題,因為問題種類多樣,這里就不一一列舉,大家可以在網(wǎng)上搜索,我也會總結(jié)移植常遇到的問題和解決方法,后面再寫一篇推文給大家分享。
- 移植成功,大家可以動手試試了。
總結(jié)
當裸機開發(fā)的實時性差,資源浪費和編寫困難等問題逐漸暴露出來時,RTOS就是我們首選的解決方式。我們也就從單片機工程師轉(zhuǎn)變成嵌入式工程師了。本文詳細介紹了如何移植FreeRTOS到STM32上,這是嵌入式入門的關(guān)鍵,后面會繼續(xù)分享更多嵌入式相關(guān)內(nèi)容。
-
單片機
+關(guān)注
關(guān)注
6067文章
44969瀏覽量
649703 -
嵌入式
+關(guān)注
關(guān)注
5148文章
19634瀏覽量
316862 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
492瀏覽量
64183
發(fā)布評論請先 登錄
如何將freemodbus移植到stm32平臺
FreeRTOS系統(tǒng)在STM32系列單片機的移植
FreeRTOS系統(tǒng)在STM32單片機上是怎樣去移植的
STM32不同型號單片機keil工程移植方法
如何將FreeRTOS實時操作系統(tǒng)移植到STM32單片機中
如何將FreeRTOS移植到stm32上呢
如何在STM32單片機上移植FreeRTOS

如何將FreeRTOS移植到STM32F103上詳細步驟和注意事項詳細說明

STM32不同型號單片機keil工程移植說明

從0到1學(xué)習(xí)FreeRTOS:FreeRTOS 內(nèi)核應(yīng)用開發(fā):(一)移植FreeRTOS到STM32第一部分

在STM32F103單片機上移植FreeRTOS

如何將FreeMODBUS協(xié)議棧移植到AT32F43x單片機方法

評論