<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FreeRTOS移植-基于STM32F407

碼農愛學習 ? 來源:碼農愛學習 ? 作者:碼農愛學習 ? 2022-09-26 09:04 ? 次閱讀

首先新建或找一個基于KeilSTM32基礎工程,這里我已經創建好了一個STM32F407VET6的工程模板,工程結構如下圖的第1步的矩形框內所示。

下面需要移植FreeRTOS了,將FreeRTOS的源碼文件復制到工程文件夾中,一些用不到的文件可刪除(哪些文件需要用到可參考上一篇的源碼結構分析部分),然后在Keil中也創建一個FreeRTOS目錄,將c文件添加進工程,注意port.c來自于RDVS的ARM_CM4F,對應于移植到的SMT32F407硬件。

pYYBAGMwZUKAX7uvAAFlVsw-sV4348.png

添加完c文件后,還要添加對應的h文件的搜尋路徑,具體如下:

pYYBAGMwZUqAS2GcAAFgX5g1DDY177.png

然后就可以編譯了,先進行第1次編譯:

......(省略顯示若干行)
FreeRTOSportableRVDSARM_CM4Fport.c: 0 warnings, 1 error
compiling heap_4.c...
.FreeRTOSincludeFreeRTOS.h(98): error:  #5: cannot open source input file "FreeRTOSConfig.h": No such file or directory
  #include "FreeRTOSConfig.h"
FreeRTOSportableMemMangheap_4.c: 0 warnings, 1 error
".ObjectsTemplate_FreeRTOS.axf" - 8 Error(s), 0 Warning(s).
Target not created.
Build Time Elapsed:  00:00:23

有一個錯誤,找不到"FreeRTOSConfig.h",這個文件在FreeRTOS源碼的Demo文件中,

將Demo中的"FreeRTOSConfig.h"文件放到FreeRTOS文件夾下的include文件夾下, 進行第2次編譯:

......(省略顯示若干行)
compiling tasks.c...
compiling timers.c...
compiling port.c...
FreeRTOSportableRVDSARM_CM4Fport.c(713): error:  #20: identifier "SystemCoreClock" is undefined
                
ortNVIC_SYSTICK_LOAD_REG = ( 
onfigSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
FreeRTOSportableRVDSARM_CM4Fport.c: 0 warnings, 1 error

又提示"SystemCoreClock" 未定義,因為在"FreeRTOSConfig.h" : 中使用了SysyemCoreClock來標記MCU的頻率,

在"FreeRTOSConfig.h" :的87~95行:

#ifdef __ICCARM__
	#include 
	extern uint32_t SystemCoreClock;
#endif

#define configUSE_PREEMPTION			1
#define configUSE_IDLE_HOOK				1
#define configUSE_TICK_HOOK				1
#define configCPU_CLOCK_HZ				( SystemCoreClock )

將條件編譯

#ifdef __ICCARM__

修改為

#if defined(__ICCARM__)||defined(__CC_ARM)||defined(__GNU__)

再次進行第3次編譯:

......(省略顯示若干行)
compiling port.c...
compiling heap_4.c...
linking...
.ObjectsTemplate_FreeRTOS.axf: Error: L6200E: Symbol SVC_Handler multiply defined (by port.o and stm32f4xx_it.o).
.ObjectsTemplate_FreeRTOS.axf: Error: L6200E: Symbol PendSV_Handler multiply defined (by port.o and stm32f4xx_it.o).
.ObjectsTemplate_FreeRTOS.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by port.o and stm32f4xx_it.o).
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 0 warning and 3 error messages.
".ObjectsTemplate_FreeRTOS.axf" - 3 Error(s), 0 Warning(s).
Target not created.
Build Time Elapsed:  00:00:02

又提示port.o與stm32f4xx_it.o有重復定義(.o為編譯的目標文件,其實就是對應的.c文件出了問題)

注釋掉stm32f4xx_it.c中的SVC_Handler() PendSV_Handler() SysTick_Handler()即可

修改后的stm32f4xx_it.c的110~145行:

/**
 * @brief This function handles SVCall exception.
 * @param None
 * @retval None
 */
//void SVC_Handler(void)
//{
//}

/**
 * @brief This function handles Debug Monitor exception.
 * @param None
 * @retval None
 */
void DebugMon_Handler(void)
{
}

/**
 * @brief This function handles PendSVC exception.
 * @param None
 * @retval None
 */
//void PendSV_Handler(void)
//{
//}

/**
 * @brief This function handles SysTick Handler.
 * @param None
 * @retval None
 */
//void SysTick_Handler(void)
//{
// 
//}

再次進行第4次編譯:

......(省略顯示若干行)
linking...
.ObjectsTemplate_FreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationIdleHook (referred from tasks.o).
.ObjectsTemplate_FreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationStackOverflowHook (referred from tasks.o).
.ObjectsTemplate_FreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationTickHook (referred from tasks.o).
.ObjectsTemplate_FreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationMallocFailedHook (referred from heap_4.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 4 error messages.
".ObjectsTemplate_FreeRTOS.axf" - 4 Error(s), 0 Warning(s).

又提示4個hook函數未定義,

這是因為在"FreeRTOSConfig.h"中定義了這些鉤子函數,但未找到函數定義,我們先注釋掉這些定義,

就是將configUSE_IDLE_HOOK之類的宏定義定義為0即可,

查看"FreeRTOSConfig.h"的93~108行:

#define configUSE_IDLE_HOOK				1
#define configUSE_TICK_HOOK				1
#define configCPU_CLOCK_HZ				( SystemCoreClock )
#define configTICK_RATE_HZ				( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES			( 5 )
#define configMINIMAL_STACK_SIZE		( ( unsigned short ) 130 )
#define configTOTAL_HEAP_SIZE			( ( size_t ) ( 75 * 1024 ) )
#define configMAX_TASK_NAME_LEN			( 10 )
#define configUSE_TRACE_FACILITY		1
#define configUSE_16_BIT_TICKS			0
#define configIDLE_SHOULD_YIELD			1
#define configUSE_MUTEXES				1
#define configQUEUE_REGISTRY_SIZE		8
#define configCHECK_FOR_STACK_OVERFLOW	2
#define configUSE_RECURSIVE_MUTEXES		1
#define configUSE_MALLOC_FAILED_HOOK	1

修改93 94 106 108行的數值為0,即:

#define configUSE_IDLE_HOOK				0
#define configUSE_TICK_HOOK				0
......(省略顯示11行)
#define configCHECK_FOR_STACK_OVERFLOW	0
......(省略顯示1行)
#define configUSE_MALLOC_FAILED_HOOK	0

再次進行第5次編譯:

......(省略顯示若干行)

compiling port.c...

compiling heap_4.c...

linking...

Program Size: Code=1880 RO-data=424 RW-data=68 ZI-data=2036 

".ObjectsTemplate_FreeRTOS.axf" - 0 Error(s), 0 Warning(s).

Build Time Elapsed:  00:00:01

終于編譯ok了,這樣基本上算移植成功了。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    4993

    文章

    18357

    瀏覽量

    289923
  • FreeRTOS
    +關注

    關注

    12

    文章

    473

    瀏覽量

    61402
收藏 人收藏

    評論

    相關推薦

    STM32F407怎么移植基于RTL8305SC的LWIP?

    我現在手里有塊板子,是STM32F407與RTL8305SC組成的網絡部分,現在想移植LWIP,怎么移植 求教
    發表于 03-30 04:35

    STM32F1移植STM32F407

    STM32F1移植STM32F407(ld3320)參考紅色,F4黑色EXTI:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
    發表于 08-04 07:56

    stm32f407的內核移植

    上一篇博文講到了先移植基于stm32f407的u-boot,本文講到的是最難的移植stm32f407的內核,這個內核源代碼我也是在網上找到了,看介紹是國外大神所修改而成的,真的萬分感謝
    發表于 08-05 06:18

    STM32F407移植ThreadX

    STM32CubeIDE 中針對 STM32F407 移植 ThreadX,不依賴盜版破解的Keil MDK、IAR等軟件。
    發表于 08-23 08:22

    FreeRTOS移植STM32F407

    FreeRTOS,接下來我們就把FreeRTOS移植到我們所使用的平臺上,我們使用的板子是STM32F407。02. 預備工作要移植
    發表于 08-24 06:07

    UCOS III是怎樣移植STM32F407上去的

    UCOS III是怎樣移植STM32F407上去的?移植步驟有哪些呢?
    發表于 10-20 06:38

    如何使用STM32F407移植FreeRTOS

    如何使用STM32F407移植FreeRTOS呢?有哪些操作步驟?
    發表于 10-21 09:45

    怎樣去移植stm32f407的uClinux內核呢

    怎樣去移植stm32f407的uClinux內核呢?求解答
    發表于 10-26 07:50

    STM32F407 FreeRTOS開發指南

    參考資料:正點原子《littleVGL 開發指南》正點原子《STM32F407 FreeRTOS 開發指南》硬件平臺:stm32f407開發板(或最小系統)、4.3寸TFTLCD以正點原子的例程為
    發表于 01-05 06:55

    STM32F407開發板用戶手冊】第1章?? 初學STM32F407的準備工作

    STM32F407開發板用戶手冊】第1章?? 初學STM32F407的準備工作
    發表于 12-04 13:36 ?73次下載
    【<b class='flag-5'>STM32F407</b>開發板用戶手冊】第1章?? 初學<b class='flag-5'>STM32F407</b>的準備工作

    FreeRTOS-stm32f407移植

    FreeRTOS-stm32f407移植需要準備的內容FreeRTOS移植步驟1、添加FreeRTOS源碼1)復制源碼內容2)刪除porta
    發表于 12-04 13:36 ?9次下載
    <b class='flag-5'>FreeRTOS-stm32f407</b><b class='flag-5'>移植</b>

    STM32CubeIDE 中針對 STM32F407 移植 ThreadX

    STM32CubeIDE 中針對 STM32F407 移植 ThreadX,不依賴盜版破解的Keil MDK、IAR等軟件。
    發表于 12-04 13:36 ?17次下載
    在 <b class='flag-5'>STM32</b>CubeIDE 中針對 <b class='flag-5'>STM32F407</b> <b class='flag-5'>移植</b> ThreadX

    STM32FreeRTOS移植

    FreeRTOS,接下來我們就把FreeRTOS移植到我們所使用的平臺上,我們使用的板子是STM32F407。02. 預備工作要移植
    發表于 12-04 14:06 ?14次下載
    【<b class='flag-5'>STM32</b>】<b class='flag-5'>FreeRTOS</b><b class='flag-5'>移植</b>

    stm32f407原理圖

    stm32f407原理圖
    發表于 07-14 16:07 ?181次下載

    STM32F407 FreeRTOS開發手冊 V1.1

    STM32F407 FreeRTOS開發手冊_V1.1PDF文件下載。
    發表于 07-31 11:16 ?44次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>