目前市面上的單片機作業系統很多,為何FreeRTOS會這麼搶眼

2022-05-13     大方老師單片機

原標題:目前市面上的單片機作業系統很多,為何FreeRTOS會這麼搶眼

目前市面上的單片機作業系統很多,為何FreeRTOS會這麼搶眼

隨著嵌入式開發的認知度越來越高,從事這個專業或者以此為愛好的朋友也是越來越多,當在裸機開發的過程中遇到任務比較多,難以處理的時候,難免就會想到使用作業系統,目前市面上的單片機作業系統很多,其中有一個比較搶眼的就FreeRTOS,這個系統是完全開源的一個作業系統,所以使用的話沒有侵權的問題,而且可查閱的資料也很豐富,因此使用群體也是很大的一個數目,我們可以看一2017年的數據,因為找了好久也沒有找到最新的數據

FreeRTOS是僅次linux的作業系統,市場占比還是很不錯的,估計最近兩三年應該也不錯,畢竟開源的東西,沒有侵權問題,沒有費用問題,對於國內的很多個人開發者來說還是相當友好的。

今天我們就一步一步的教大家如何移植一個簡單FreeRTOS例程!

FreeRTOS系統源碼下載

第一步我們需要做的就是到官網去下載最新版本FreeRTOS源碼,這是我們移植的時候需要的,官網地址我給大家放這裡了,可以直接點擊進入哦

FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensionswww.freertos.org/

進入首頁就可以看到下載的引導

不過,這是個國外的網站,訪問起來可能會較慢,下載更是需要耗費不少的時間

目前官網提供的最新的版本v10.4.1的,最好可以下載到最新的版本

FreeRTOS系統源碼所包含的內容

下載壓縮包之後打開,裡面主要包含以下的這些內容

前面的兩個文件夾是主要包含源碼的文件夾,而第二個帶plus字樣的這個文件夾,主要是基於第一個文件夾內容的一些擴展,可以看一下內容

這個我們暫時使用不到,在初期我們主要的是使用第一個文件夾下的內容

在打FreeRTOS文件夾之後分為這幾個文件夾

demo文件夾,顧名思義,包含的是一些可以參考的例程FreeRTOS提供的例程真心不錯,包含各個工具鏈的,比keileclipse等,包含各個不同的晶片的,基本上市面上主流的晶片在他們提供demo里都可以找到。這個文件夾的主要作用就是給我們提供實例,教給我們如何使用,有很大的參考價值

source文件夾內存放的就FreeRTOS的核心代碼了,也是我們在待會說例程移植的時候重點用到的部分,打開這個文件夾,包含以下部分內容

include文件夾內包含所有的頭文件portable文件夾下包含的是和晶片接口相關的東西,我們打開這個文件夾之後可以看到,裡面是進一步層級的晶片分類文件夾

每個文件夾內包含的是一類晶片的接口文件

然後,最外層的這個七個源文件FreeRTOS的核心代碼,主要是操作內核的作用

以上就FreeRTOS系統的主要文件構成,下面我們就來看一下如何移植一個簡單的例程

如何移植一個例程

在操作這個之前,最好具備的前提:

第一、有一定的裸機開發經驗,做過裸機開發的例程;

第二、會使keil開發工具,這一講我們是基keil的,後續我們會講述基eclipse

第三、手頭有一個可以使用的開發板,以驗證例程的正確性;

我們這裡是基於一個裸機例程的,這樣會省去裸機當中需要很多基礎操作,這個不重要,如果你有裸機開發的經驗的話,自己先新建一個就好了,畢竟這個不是太難,而用裸機原有例程的目的就是為了方面驗證移植的正確性。

下面我們就正式開始:

第一步FreeRTOS的源copy到我們的項目目錄下,然後對系統做一下簡單的剪裁,因為原有的系統體積有點大,我們儘量的縮小系統的體量,portable文件夾下只需要留下三個重要的文件夾即可,當然這個不是隨便留的,是和你使用的開發板有直接關係的,我使用的STM32的板子,所以使用的ARM內核,因此我留下的是以下三個,第二個內存管理是一樣的,都需要,第一個也都需要,第三個就是根據內核型號做選擇了;

第二步:使keil打開我們準備好的基礎例程,打開之後先編譯一下,確保原有的環境配置以及源碼沒有問題,然後再進行下一步操作;

第三步:打Manage Project Items"操作卡,新建兩個分組,如下

從這個命名上,大家應該可以猜到一個是用來存放核心代碼的,一個是用來存放晶片的接口代碼的,新建好之後,把相應的源文件添加到分組內

這個是核心代碼需要添加的源文件,就是在上一小結中我們提到的,沒有被分配到文件夾下的核心代碼。

第二個文件分組就要注意了,這個需要根據你使用的開發板進行選擇,首先要選擇一個內存管理下的源文件,這裡是MemMang這個文件夾下,這裡共有五個源文件

其對應的就是五種不同的內存管理方法,所達到的目的都是一樣的,也各有優缺點,我們這裡就先使用第四個,以後我們會詳細的講解不同的內存管理的優缺點。

然後,我們需要在選擇一port的源文件,我們使用的STM32的晶片,內核M3的,所以我們需要使用的RVDSARM-CM3文件夾下port.c文件,添加之後的效果如下

第四步:添加包含頭文件,我們之前說到的系統源碼還有一個專門的頭文件文件夾,還RVDS下也有頭文件,需要把這些頭文件路徑做一下包含,如下

第五步:移植一FreeRTOSConfig.h的頭文件,這個可以demo工程中去找,每一個工程中都有這個文件,這是一個系統配置的文件,會使能一些系統的操作以及開啟一些系API函數等,這個部分涉及的內容比較多,需要單獨去講,所以這裡建議先demo中移植一個過來所使用,後續再慢慢理解;

第六步:編譯調試,理論上來說,到這裡你就可以編譯你的移植工程了,有可能你編譯會報錯,如果報錯的話就要根據報錯內容去修改,一般到這一步出錯都是可以通過更FreeRTOSConfig內的配置解決的,當你解決完之後,編譯通過,到此並不代表你成功的移植了,你還需要通過功能來驗證;

第七步:在主函數實現功能,使用作業系統做功能,就需要建task了,我們可以在主函數建立兩個簡單task做一下驗證,這裡附上簡單的例程代碼,僅供參閱

首先定義變量函數

主函數內創建任務

實現兩個任務的任務函數

非常簡單的例程功能,就是為了驗證移植是否成功。

第八步:編寫玩主函數之後,就可以再次編譯了,編譯成功之後,下載到你的開發板,測試例程是否按照設計的功能運行。

備註:功能的實現是基於你的基礎例程的,這裡沒有提及,需要特別注意;主函數關於創建任務又是另一部分話題,這裡沒有展開去說,在後續的其他文章中會繼續說明,展開的話,此篇內容篇幅太大,不利於閱讀。

到此,一個簡單的例程移植結束!

小結:主要從宏觀上了解一下一FreeRTOS的例程是什麼樣的,然後自己去實現一個簡單的例程,系統涉及的內容面還是比較廣泛的,很難一篇文章都提及,我們會在後續的文章中逐步的給大家展開。

文章來源: https://twgreatdaily.com/zh-hk/aa8e093c288e8817726e71c017f998aa.html