日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS

發布時間:2024/7/23 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


上一次,我們簡單的測試了FreeRTOS的基于IAR EWARMv6.4STM32F103VET6平臺的Demo,對其有了一個基本認識。接下來我們開始自己移植FreeRTOS的過程。

1、創建一個“FreeRTOSTestProject”項目文件夾,并在其下創建FreeRTOSLibrariesProjectUser文件夾。

與無操作系統的項目一樣User中存放應用文件;Project中存放項目文件;Libraries中存放STM32F1xx標準庫文件。而在FreeRTOS文件夾中存放操作系統文件。

\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文件夾。

對于內存管理的幾個文件的大致內容如下:

  • heap_1.c:這是所有實現中最簡單的一個。一旦分配內存之后,它甚至不允許釋放分配的內存。

  • heap_2.c:和heap_1不同,這個方案使用一個最佳匹配算法,它允許釋放之前分配的內存塊。它不會把相鄰的空閑塊合成一個更大的塊,可能會造成內存碎片。

  • heap_3.c:簡單的包裝了標準庫中的malloc()free()函數,包裝后的malloc()free()函數具備線程保護。

  • heap_4.c:這個方案使用一個最佳匹配算法,但不像方案2那樣。它會將相鄰的空閑內存塊合并成一個更大的塊。

  • heap_5.c:這個方案同樣實現了heap_4.c中的合并算法,并且允許堆棧跨越多個非連續的內存區。

?

\FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_IAR目錄下的FreeRTOSConfig.h文件復制到新建項目的FreeRTOS文件夾。

至此,全部用于移植的文件準備完成。

2、在IAR EWARM中新建workspace,再一個項目,取名為FreeRTOSTest,并添加組:

并向個組中添加相應的文件。

3、配置項目選項

項目的屬性選項配置與誤操作系統時一樣,需要說一下的是在Assembler中的Preprocessor標簽下添加$PROJ_DIR$\..\..\User\inc路徑,因為在會變文件中有對FreeRTOSConfig.h文件的引用。

4、修改FreeRTOSConfig.h配置文件,這個根據需要修改,目前只定義如下3個宏定義,避免去修改啟動文件:

#define vPortSVCHandler???????? SVC_Handler

#define xPortPendSVHandler???? PendSV_Handler

#define xPortSysTickHandler???? SysTick_Handler

如果僅作次修改,編譯時會報警說重復定義,所以還需要注釋掉stm32f10x_it.c文件中對三個函數的定義。

5、編寫測試應用

main.c文件中添加相應的代碼,聲明如下函數及代碼(我計劃4個任務):



/*************************************************************************** 函數聲明 ***************************************************************************/ static void vTask1(void *pvParameters); static void vTask2(void *pvParameters); static void vTask3(void *pvParameters); static void vTask4(void *pvParameters); static void AppTaskCreate (void); /*************************************************************************** 變量聲明 ***************************************************************************/ static TaskHandle_t xHandleTask1 = NULL; static TaskHandle_t xHandleTask2 = NULL; static TaskHandle_t xHandleTask3 = NULL; static TaskHandle_t xHandleTask4 = NULL;任務創建函數如下: static void AppTaskCreate (void) {xTaskCreate( vTask1, "vTask1",512, NULL,1, &xHandleTask1); xTaskCreate( vTask2, "vTask2",512, NULL,1, &xHandleTask2); xTaskCreate( vTask3, "vTask3",512, NULL,1, &xHandleTask3); xTaskCreate( vTask4, "vTask4",512, NULL,1, &xHandleTask4); } 主函數如下: int main(void) {/* 創建任務 */AppTaskCreate();/* 啟動任務調度,開始執行任務 */vTaskStartScheduler(); }

編譯無錯誤4個任務同時運行。移植初步測試成功。



總結

以上是生活随笔為你收集整理的FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。