1. 程式人生 > >STM32F4+智慧家居程式設計環境搭建-1.FreeRTOS系統移植

STM32F4+智慧家居程式設計環境搭建-1.FreeRTOS系統移植

  1. 準備基礎工程。要移植FreeRTOS,肯定需要一個基礎工程,這裡不做過多解釋。
  2. FreeRTOS原始碼獲取。連結:https://pan.baidu.com/s/1CGaCbTwltM1JmBSASSv5ng  提取碼:erds 
  3. 在工程中新增FreeRTOS的資料夾,建立好後將FreeRTOS原始碼新增到資料夾中,新增完後如圖所示:
  4. portable資料夾中只需留下keil、MemMang和RVDS這三個檔案,其餘都刪除,完成後如圖所示
  5. 向工程中新增檔案,新建分組FreeRTOS_CORE和FreeRTOS_PORTABLE,向分組中新增檔案,FreeRTOS_CORE檔案在哪裡找就不說了。說一下FreeRTOS_PORTABLE中的port.c和heap_4.c,其中port.c是RVDS資料夾下的ARM_CM4F中的檔案,因為STM32F407是Cortex-M4核心並且帶有MPU,因此要選擇ARM_CM4F中的port.c檔案。heap_4.c是MemMang資料夾中的,這個資料夾裡邊有5個檔案,heap_1.c,heap_2.c,heap_3.c,heap_4.c,heap_5.c,這5個檔案是5種不同的記憶體管理方法,都可以用來作為FreeRTOS的記憶體管理檔案,,這裡選擇heap_4.c,它的主要特點是不會出現記憶體碎片,有記憶體合併演算法。最後新增編譯路徑。如圖所示:                                                                                                       
  6. 編譯之後會提示你找不到“FreeRTOSConfig.h”這個檔案,這個檔案可以自己建立,但是不太現實,所以我們可以從官方例程中移植過來,開啟資料夾CORTEX_M4F_STM32F407ZG-SK你就會看到“FreeRTOSConfig.h”這個檔案,複製到自己的工程中,複製到哪自己決定。                                                                                                                                       
  7. 再次編譯,這次錯誤是SystemCoreClock未定義,這是因為在FreerRTOSConfig.h中使用到了SystemCoreClock來標記MCU的頻率。開啟FreerRTOSConfig.h檔案,將46行預處理命令改成如下所示:
  8. 這裡可能出現找不到cmsis_armcc.h、core_cmFunc.h和core_cmInstr.h檔案的錯誤,這時開啟keil軟體檔案位置,找到這三個檔案複製到自己的工程core(這是我的)檔案下,keil軟體檔案位置路徑如下圖:                                     
  9. 再次編譯,出現重複定義的錯誤, 這裡遮蔽掉stm32f4xx_it.c中的SVC_Handler()、PendSV_Handler()、SysTick_Handler()三個函式。
  10. 再次編譯出現未定義函式的錯誤,這函式名是鉤子函式,這是因為在FreerRTOSConfig.h檔案中開啟了這些鉤子函式,但是沒有定義,在FreerRTOSConfig.h檔案中將相對應的configUSE_IDLE_HOOK、configUSE_TICK_HOOK、configUSE_MALLOC_FAILED_HOOK、configCHECK_FOR_STACK_OVERFLOW巨集定義改為0即可。
  11. 程式設計成功,移植完成。在主函式隨便寫一個任務測試,測試程式如下: