國產stm32的Freertos移植之路--基於GD32

2022-01-11 電子菌

一、移植環境

系統:WIN7

MDK:keil v5.26

開發板:GD32F303C-EVAL

固件庫:V1.0.2

FreeRTOS版本:V10.4.0

二、複製FreeRTOS到工程文件中

1> FreeRTOS簡要介紹

FreeRTSO下載連結:https://www.freertos.org/a00104.html

將下載的文件解壓,內容如下:FreeRTOS就是我們需要移植用到的,裡面包含了官方移植的demo和內核文件,FreeRTOS-Plus裡面包含了一些第三方的組件。

將下載的文件解壓,內容如下:FreeRTOS就是我們需要移植用到的,裡面包含了官方移植的demo和內核文件,FreeRTOS-Plus裡面包含了一些第三方的組件。

FreeRTOS文件夾內容如下:Demo文件夾下是官方在開發板移植好的demo,可以參考,Source文件夾下就是我們需要移植的內核文件。

Source文件夾內容如下:

2> 在準備好的工程下創建一個FreeRTOS文件夾下,將1>提到的Source文件中所有的內容複製到這個文件夾下:

刪除上圖中紅框中的內容,如下:

在當前目錄下新建一個文件夾src,將紅框中的內容剪切到src文件夾下,如下圖:

進入到portable文件夾下,只保留下圖三個文件夾,其餘全部刪除,如下圖:

其中keil文件夾下沒有可以用的內容,MemMang下是官方給的5種內存管理的方法,沒有好壞之分,都有優缺點,根據需要選一種方式即可。
三、添加FreeRTOS文件到工程
1> 添加src下的文件到工程

2> 添加portable/MemMang/heap_4文件到工程

3> 添加portable/RVDS/ARM_CM4F/port文件到工程,因為GD32F303內核是Cortex-M4F內核。

4> 添加相應的頭文件路徑

5>編譯一下,提示如下錯誤

缺少FreeRTOSConfig.h這個頭文件,我們在FreeRTOS源碼中複製一個將這個路徑下的(FreeRTOS\FreeRTOS\Demo\CORTEX_STM32F103_Keil)FreeRTOSConfig.h文件複製到工程中,並且添加到工程中,如下圖:

6>再次編譯,提示如下錯誤:

其實就是缺少一個宏定義,這裡可以在FreeRTOSConfig.h中定義一個

再次編譯發現沒有錯誤了。
7>寫一個簡單的LED任務測試一下,如下圖:

下載到開發板,發現並沒有LED運行,仿真調試發現,MCU進入了硬體中斷,如下圖:

這裡我們仔細看一下,FreeRTOSConfig.h這個文件的配置,源碼如下:

由上面代碼可以看出,這裡系統時鐘是需要更改的,configCPU_CLOCK_HZ這個是系統時鐘,GD32F303是120Mhz的主頻;configTOTAL_HEAP_SIZE設置堆得大小,這裡設置了17KB的大小,而在啟動代碼裡,堆設置了1KB,棧的大小也是設置的1KB,***注意:這三者的總和不能超過MCU自身的RAM大小。***如下圖:

這裡,我們將啟動文件裡的堆改成0x00000200(0.5KB),configTOTAL_HEAP_SIZE也更改成20KB,更改如下:

接下來編譯進行下載,發現依舊會進入硬體中斷,這就可能讓人很崩潰了,這裡需要了解一下FreeRTOS在Cortex內核中如何實現任務切換的機制,這裡可以參考SVC & PendSV這篇博客,總的來說,既然想實現任務切換,就需要重新寫這兩個函數,之後在查看一下內核文件port.c,發現這裡已經幫我們寫好了,那就簡單了,我們將gd32f30x_it.c文件裡這兩個中斷函數給刪掉,如下:

這裡再次進行仿真下載調試,本以為可以萬事大吉了,卻還是被顯示狠狠打臉了,仿真發現,程序死在了下面的循環中:

如上圖,程序死在了SVC_Handler中斷這,而我們上一步是把這個函數給刪了,因為在上一步操作時,我們分析,內核文件port.c中幫我們重新寫了這個函數,我們找到這個對應的函數如下:

呵呵,這就尷尬了,官方寫的這個函數名稱和啟動文件中的中斷入口函數名稱不一致,既然如此,只能讓這兩個函數名聯繫到一起才行,我們在FreeRTOS.h中添加如下代碼:

這下總應該可以了吧,下載編譯,發現燈點亮了,心裡那個開心啊,可是下一秒哭的心都有了,創建的任務是燈閃爍,現在燈只是點亮了並沒有閃爍。仿真調試,發現如下:

看到這個現象,心情放鬆了一下,和之前現象類似,那我們接著去port.c文件去找一下,果真被我找到了:如下:

那仿照之前的操作,在FreeRTOSConfig.h中添加:

LED終於亮了,至此,FreeRTOS最基本的移植完成。【本文參考CSDN:笙歌君獨憂】


相關焦點

  • 手把手教你移植FreeRTOS到GD32F350RX
    本文講解的是使用移植FreeRTOS到GD32F350RX中(基於KEIL 5編譯器)。
  • 國產替代環境下,測試了下GD32E230C8T6最小系統板
    看到GD32E230C8T6理論上可以替代STM32F103C8T6,在這次去X商城買料的時候,我順便買了片樣片,並要了個免費的最新系統樣板PCB。焊好後,去官網下載資料:(資料下載請點擊閱讀原文內下載)當前選用的C8T6(容量還是跟ST的保持一致,國產的就不能大些麼~)
  • ​不可不知的從STM32到GD32移植攻略
    不可不知的從STM32到GD32移植攻略從STM32到GD32移植,主要的注意事項有:
  • 輕鬆幾步實現在STM32上運行FreeRTOS任務
    以前想要在STM32上跑FreeRTOS作業系統,還需要自己一步一步的移植FreeRTOS代碼。現在使用STM32CubeMX工具,就不需要這麼繁雜的移植工作,只需輕鬆幾步就能讓FreeRTOS跑起來。本文以STM32L412(NUCLEO-L412KB板卡)為例,其它STM32型號類似。
  • 盤點STM32的國產替代者(5)
    應讀者要求,嵌入式ARM將繼續介紹能夠替代STM32的國產產品。
  • 超實用FreeRTOS移植教程
    今天就來講一分享FreeRTOS移植的教程。準備在移植之前,我們首先要獲取到FreeRTOS的官方的源碼包。這裡我們提供兩個下載連結:一個是官網:http://www.freertos.org/另外一個是代碼託管網站:https://sourceforge.net/projects/freertos/files/FreeRTOS/打開網站連結之後,我們選擇FreeRTOS的最新版本V9.0.0(2016年),儘管現在FreeRTOS的版本已經更新到V10.0.1了,但是我們還是選擇
  • FreeRTOS系列第2篇--學習FreeRTOS的前期準備工作?
    MCU:本套教程採用STM32F107VCT6作為MCU進行講解,通過本系列教程的學習,你可以很方便的移植到其他的單片機上面。學習FreeRTOS主要有兩種參考資料:1、FreeRTOS的pdf文檔,下載地址為http://www.freertos.org/Documentation/RTOS_book.html2、直接在FreeRTOS官方網站上面看各種函數的API說明文檔。
  • lvgl最新版本在STM32上的移植使用
    lvgl資料 LVGL的資料很豐富,下面列出一些常用的資料連結:1、lvgl英文官網:https://lvgl.io/2、lvgl中文網:https://littlevgl.cn/    (還在建設中)3、lvgl源碼:https://github.com/lvgl/lvgl4、lvgl基於
  • mbedtls | 移植mbedtls庫到STM32裸機的兩種方法
    STM32移植方法移植mbedtls開源庫到stm32有兩種方法:① 針對STM32CubeMX中Middleware下面已經提供mbedtks庫的情況:直接使用cubeMX配置即可;② 針對STM32CubeMX中沒有提供mbedtls
  • STM32嵌入式開發中的RTOS,你用過哪些?
    收錄於話題 #stm32    FreeRTOS的不足:相對於常見的μC/OS—II作業系統,FreeRTOS作業系統既有優點也存在不足。
  • STM32中斷,及FreeRTOS中斷優先級配置
    關於FreeRTOS最大優先級配置的內容可以參考:https://www.freertos.org/RTOS-Cortex-M3-M4.html提示:
  • STM32與Arduino問答集
    www.stm32duino.com       此論壇網專門針對STM32系列晶片板,即時更新相關ArduinoIDE 環境API。 問:我如何開始著手?答:1.在Arduino 1.6.12 環境下安裝stm32duino 支持包視頻:https://www.youtube.com/watch?
  • STM32 上使用 PWM
    硬體平臺簡介本文基於正點原子 STM32L475 pandora 開發板,給出了 PWM 的具體應用示例代碼,由於 RT-Thread 上層應用 API 的通用性,因此這些代碼不局限於具體的硬體平臺,用戶可以輕鬆將它移植到其它平臺上。
  • 從原理圖PCB到移植RTOS【細說STM32】【一】
    今天是第一章節,我們介紹一下如何移植標準的官網代碼(裸機,無OS)到iBox開發板上,控制LED閃爍。如此簡單的試驗,還是希望給你不一樣的體驗。【一、安裝編譯工具Keil】1、為什麼選擇keil在這個操作之前,原本應該解釋為什麼選擇「Cortex-M」,為什麼選擇「M3」、為什麼選擇「ST」。這樣容易扯遠了。
  • 分享一個老外封裝的STM32最全常用驅動庫,相見恨晚有木有!
    應有盡有,超級強大,超級好用,麻麻再也不用擔心我不會移植驅動了。原作基於STM32F4探索者和F7開發,可以十分方便的移植到其他STM32內核平臺,包含了2個版本,一個是標準庫函數,另一個是HAL庫版本。       不廢話,截圖感受下:
  • 在Linux上運行STM32,快來試試!
    本文將重點描述用戶如何快速入手STM32MP1所需要的工具,軟體包以及操作,不僅適合linux零基礎的STM32用戶,也適合其它有一定linux基礎的用戶,基於Windows PC獨立快速搭建STM32MP1平臺。我們用來下載固件的工具是 STM32CubeProgrammer。很多STM32用戶的電腦都裝有這款工具。
  • 基於小熊派使用 FreeRTOS+SPI+DMA 驅動 TFT-LCD
    一、文章前言二、SPI+DMA 配置三、FreeRTOS 配置四、代碼編寫五、實驗現象基於小熊派使用 FreeRTOS+SPI+DMA 驅動 TFT-LCD一、文章前言配置完成界面以上 SPI+DMA 驅動配置好了,下面配置 FreeRTOS三、FreeRTOS 配置開啟 FreeRTOS 是為了更加方便 DMA 邏輯代碼的實現,更重要的是因為後面我計劃移植
  • 想學FreeRTOS實時作業系統的看過來,實用的入門教程
    FreeRTOS可以被移植到很多不同架構的處理器和編譯器。每一個RTOS移植都附帶一個已經配置好的演示例程,可以方便快速啟動開發。更好的是,每個演示例程都附帶一個說明網頁,提供如何定位RTOS演示工程原始碼、如何編譯演示例程、如何配置硬體平臺的全部信息。
  • 國產經典單機為何頻頻移植手遊?
    國產單機為何能夠如此快速的移植移動端?我們回顧一下國產單機遊戲的歷史來尋找原因。故事的開始:抹不去的文化情懷,中國傳統文化是經典單機的基石  1995年,《仙劍奇俠傳》為國產單機遊戲劃開了一個全新的時代。