精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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了,這樣基本上算移植成功了。





審核編輯:劉清

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

    關注

    5071

    文章

    19026

    瀏覽量

    303492
  • FreeRTOS
    +關注

    關注

    12

    文章

    483

    瀏覽量

    62018
收藏 人收藏

    評論

    相關推薦

    FreeRTOS移植STM32F407

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

    如何使用STM32F407移植FreeRTOS

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

    STM32F407 FreeRTOS開發指南

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

    STM32F407模板

    STM32F407模板,感興趣可以看看。
    發表于 07-25 18:52 ?133次下載

    STM32F407 UCOS III實驗

    STM32F407 UCOS III實驗,介紹基于STM32F407的UCOSIII實例,參考下
    發表于 09-22 14:08 ?82次下載

    STM32F407 DCMI攝像頭源碼

    STM32F407 DCMI攝像頭源碼(電源技術存在的問題總結)-【資源描述】:STM32F407 DCMI攝像頭源碼【編程語言】:C語言
    發表于 09-16 16:15 ?125次下載
    <b class='flag-5'>STM32F407</b> DCMI攝像頭源碼

    STM32F407的串口UART 基礎配置STM32CubeMX

    STM32F407的串口UART 基礎配置STM32CubeMX
    發表于 11-29 16:06 ?55次下載
    <b class='flag-5'>STM32F407</b>的串口UART 基礎配置<b class='flag-5'>STM32</b>CubeMX

    STM32F407芯片介紹

    1. 文檔準備做嵌入式開發的第一步就是了解主芯片,了解STM32F407主要要關注幾個文檔:1. stm32F407芯片手冊2. stm32F407參考手冊3. Arm Cortex-M4數據手冊
    發表于 12-04 13:21 ?109次下載
    <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原理圖下載
    發表于 01-17 13:44 ?420次下載

    stm32f407原理圖

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

    STM32F407 FreeRTOS開發手冊 V1.1

    STM32F407 FreeRTOS開發手冊_V1.1PDF文件下載。
    發表于 07-31 11:16 ?52次下載

    STM32F407+FreeRTOS+LWIP1.4.1移植問題記錄

    最近在學習物聯網相關的知識,打算用ST的開發板STM32F407ZGT6作為控制中心,上面搭載FreeROTS實時系統,STM32F407開發板作為 TCP client
    的頭像 發表于 07-21 14:09 ?3966次閱讀
    <b class='flag-5'>STM32F407+FreeRTOS</b>+LWIP1.4.1<b class='flag-5'>移植</b>問題記錄