FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
上一次,我們簡單的測試了FreeRTOS的基于IAR EWARMv6.4和STM32F103VET6平臺的Demo,對其有了一個基本認識。接下來我們開始自己移植FreeRTOS的過程。
1、創(chuàng)建一個“FreeRTOSTestProject”項目文件夾,并在其下創(chuàng)建FreeRTOS、Libraries、Project、User文件夾。
與無操作系統(tǒng)的項目一樣User中存放應用文件;Project中存放項目文件;Libraries中存放STM32F1xx標準庫文件。而在FreeRTOS文件夾中存放操作系統(tǒng)文件。
將\FreeRTOSv9.0.0\FreeRTOS\Source目錄下的6個源文件及include文件夾復制到新建項目的FreeRTOS文件夾。
將\FreeRTOSv9.0.0\FreeRTOS\Source\portable\IAR\ARM_CM3目錄下的三個文件也復制到新建項目的FreeRTOS文件夾。
將FreeRTOSv9.0.0\FreeRTOS\Source\portable\MemMang目錄下的heap_4.c文件復制到新建項目的FreeRTOS文件夾。
對于內(nèi)存管理的幾個文件的大致內(nèi)容如下:
-
heap_1.c:這是所有實現(xiàn)中最簡單的一個。一旦分配內(nèi)存之后,它甚至不允許釋放分配的內(nèi)存。
-
heap_2.c:和heap_1不同,這個方案使用一個最佳匹配算法,它允許釋放之前分配的內(nèi)存塊。它不會把相鄰的空閑塊合成一個更大的塊,可能會造成內(nèi)存碎片。
-
heap_3.c:簡單的包裝了標準庫中的malloc()和free()函數(shù),包裝后的malloc()和free()函數(shù)具備線程保護。
-
heap_4.c:這個方案使用一個最佳匹配算法,但不像方案2那樣。它會將相鄰的空閑內(nèi)存塊合并成一個更大的塊。
-
heap_5.c:這個方案同樣實現(xiàn)了heap_4.c中的合并算法,并且允許堆棧跨越多個非連續(xù)的內(nèi)存區(qū)。
?
將\FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_IAR目錄下的FreeRTOSConfig.h文件復制到新建項目的FreeRTOS文件夾。
至此,全部用于移植的文件準備完成。
2、在IAR EWARM中新建workspace,再一個項目,取名為FreeRTOSTest,并添加組:
并向個組中添加相應的文件。
3、配置項目選項
項目的屬性選項配置與誤操作系統(tǒng)時一樣,需要說一下的是在Assembler中的Preprocessor標簽下添加$PROJ_DIR$\..\..\User\inc路徑,因為在會變文件中有對FreeRTOSConfig.h文件的引用。
4、修改FreeRTOSConfig.h配置文件,這個根據(jù)需要修改,目前只定義如下3個宏定義,避免去修改啟動文件:
#define vPortSVCHandler???????? SVC_Handler
#define xPortPendSVHandler???? PendSV_Handler
#define xPortSysTickHandler???? SysTick_Handler
如果僅作次修改,編譯時會報警說重復定義,所以還需要注釋掉stm32f10x_it.c文件中對三個函數(shù)的定義。
5、編寫測試應用
在main.c文件中添加相應的代碼,聲明如下函數(shù)及代碼(我計劃4個任務):
編譯無錯誤4個任務同時運行。移植初步測試成功。
總結(jié)
以上是生活随笔為你收集整理的FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 讨论帖:比特币中的SHA256算法的实现
- 下一篇: “Hello,Github!——如何配置