《極海芯得》系列內容為用戶使用極海系列產品的經驗總結,均轉載自21ic論壇極海半導體專區,全文未作任何修改,未經原文作者授權禁止轉載。
01、概述
我本人是 cmake+vscode 組合的忠實用戶,之前寫了一篇文章介紹了在 cmake+vscode 環境下開發 G32R501 的一些實踐經驗。這篇文章準備更進一步:移植一個ThreadX。
關于 G32R501
G32R501是極海最新發布的實時控制 MCU,搭載Arm v8.1-M架構的ArmCortex-M52內核及自研紫電數學指令擴展單元,支持基于矢量擴充方案(MVE)的Arm HeliumTM技術,集成高性能感知,控制外設和靈活的外設互聯系統,支持-40°C~105°/125°C的寬環境工作溫度,適用于新能源逆變器、商業電源、工業自動化、新能源汽車等廣泛領域。
產品主頁:https://www.geehy.com/product/fifth/G32R501
關于 ThreadX
最早由 Express Logic發布,2019年被微軟收購。2023微軟宣布將 ThreadX 捐贈給 Eclipse 基金會,更名為 Eclipse ThreadX,采用 Apache 2.0 協議完全開源。
工程目錄組織
還是之前的套路,先介紹一下代碼目錄組織:

主要的文件/文件夾有:
.vscode:VSCode 配置文件
build:構建目錄
g32r501_sdk:G32R501 SDK 目錄
keil-mdk:keil 工程文件,主要用于Debug。
ports:移植文件
src:App 源碼
threadx:ThreadX 源碼
CMakeLists.txt:CMake 配置文件
這個目錄,是用git 進行源碼管理,powershell進行命令行操作。下面的操作會一步一步指示如何完成移植。
02、移植步驟
構建目錄
我的工作目錄是 D:g32r501_threadx,大家在實踐的時候可以自行選擇目錄。手動創建這個目錄,在 powershell里切換到這個目錄,使用git init創建 git倉庫:
git init .

使用 git submodule加兩個子模塊,也就是 g32r501_sdk和 threadx的目錄:
git submodule add https://gitee.com/quincyzh/hal_geehy_g32r501.git g32r501_sdk
git submodule add https://github.com/eclipse-threadx/threadx.git threadx

再手動創建 keil-mdk,ports,src三個目錄。
移植詳解
G32G501 的內核是 Cortex-M52,ThreadX目前沒有相關移植。我們以 Cortex-M55 為基礎修改,需要注意的是:
G32G501不具備Cortex-M55 安全相關特性,需要刪除相關代碼。
完成VOID _tx_initialize_low_level(VOID)這個函數及相關內容。
第一步
復制 threadxportscortex_m55ac6目錄下的 inc 和 src目錄到 portsg32r501下。刪除 tx_initialize_low_level.S這個文件,創建 tx_initialize_low_level.c 代碼為可以參考 tx_initialize_low_level.S這個文件:
可用 RAM空間首地址賦予 _tx_initialize_unused_memory這個指針。
賦值 _tx_thread_system_stack_ptr為Stack指針。
ThreadX使用 SysTick作為系統滴答時鐘,OS外其他程序也會使用 SysTick時鐘,這里就不配置 SysTick稍后我們在 main.c 文件處理 SysTick。
配置 PendSV_IRQn、SVC等幾個必須的中斷優先級。
具體內容參考下圖內容:

第二步
修改 tx_thread_secure_stack.c文件。
需要刪除其中的 __attribute__((cmse_nonsecure_entry)) ,共有5行,全部刪除。不刪除的話也沒關系,編譯期間會有告警。
第三步
完成 SysTick設置。
在 main.c 文件中,ThreadX初始化前完成 SysTick設置,就按1ms為周期:

SysTick_Handler這個 ISR中需要調用 _tx_timer_interrupt() 就可以完成 ThreadX滴答~,需要注意的是如果使能 TX_ENABLE_EXECUTION_CHANGE_NOTIFY和 TX_EXECUTION_PROFILE_ENABLE兩個特性,還需要在 _tx_timer_interrupt()之前和之后調用_tx_execution_isr_enter()和 _tx_execution_isr_exit()。

main函數可以這樣寫:

App示例
App部分,我們先來點個燈~

CMake配置
兩個關鍵部分:一是ThreadX library,二g32r501_sdk。
ThreadX library部分,把 threadx/common 下的全部源文件,port/g32r501 下的全部源文件都加入工程參與編譯就可以。
g32r501_sdk 部分,直接使用 add_subdirectory把 sdk加入工程就ok。這一部分是在 https://gitee.com/quincyzh/hal_geehy_g32r501.git這個倉庫完成,具體可以參考這個倉庫的內容。
CMakeLists.txt關鍵內容:

VSCode配置
為了更便捷地使用 vscode,可以添加一些配置:
創建/修改文件 .vscodesettings.json:

"cmake.configureEnvironment"這里構建是必須的環境變量ARMCLANG_PATH這個是 g32r501_sdk倉庫必須的內容。
"cmake.configureArgs是CMake配置工程時的參數,這里指定了一個 .cmake文件,也就是 g32r501_sdk/cmake/g32r501.cmake。文件說明了使用 armclang編譯套件。
最后的 "cmake.generator"指定使用Ninja為構建工具。
03、編譯&調試
編譯
準備工作完成了,編譯就是一鍵完成:F7。等待編譯完成。
調試
VSCode中配合 armclang調試確實不方便,我們還是回到 keil中進行調試工作。
倉庫 keil-mdk 文件夾下,有一個 keil工程,直接打開就可以開始調試。但需要在調試前手動下載程序。
因為工程里沒有任何文件,點擊編譯等按鈕都不會觸發任何操作~
如果調試中發現程序不能執行,停止時PC在 0x10000000 代碼段的情況。那是因為 G32R501 DCS 沒有正確解鎖。請在keil工程配置中設置 InitiaizationFile 這個文件已經在倉庫里,示意圖:

04、打完收工
工程師們的時機都很寶貴,時間應該聚焦在app的編寫。所以我貼心的把整個移植工程上傳到 gitee 。大家可以自行取用,順手點個 star也是歡迎的~
https://gitee.com/quincyzh/g32r501_threadx
祝工程師朋友們編碼快樂,無 Bug ~~~
注:文章作者在原帖中提供了代碼文件,有需要請至原文21ic論壇
原文地址:https://bbs.21ic.com/forum.php?mod=viewthread&tid=3460432&_dsign=de9bc2fa
-
mcu
+關注
關注
147文章
18934瀏覽量
398477 -
threadx
+關注
關注
0文章
18瀏覽量
14456 -
移植
+關注
關注
1文章
416瀏覽量
29414 -
極海半導體
+關注
關注
0文章
211瀏覽量
4825
原文標題:極海芯得 EP.74 | 使用CMake+VSCode環境移植ThreadX到G32R501
文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導體】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
使用vscode和cmake工具開發極海G32R501 MCU
極海Cortex-M52內核MCU G32R501在CoreMark的表現如何
極海G32R501實時控制 MCU 跨域新境界丨面向新一代高效能高實時控制設備
實時自控 精準調速 | 極海G32R501 2.2kW高性能矢量變頻器參考方案
如何在Keil MDK環境移植ThreadX操作系統?
極海于electronica 2024展示G32R5高性能實時控制MCU
高效雙控 精準卓越 | 極海G32R501低壓無感雙電機參考方案
高效轉換 實時調控 | 基于G32R501的800W雙路MPPT微型逆變器參考方案
極海半導體榮登2025中國IC設計Fabless100排行榜之TOP10微控制器公司
極海半導體全數字雙向電源參考方案助力能效躍升
極海半導體G32R501:面向具身機器人的高性能、高安全實時控制MCU/DSP
極海G32R501工業六軸機械臂參考方案釋放工業4.0產業價值
特來電攜手極海半導體推出G32R501T實時控制MCU
極海G32R501芯片與Jlink適配的過程解析
使用CMake+VSCode環境移植ThreadX到極海G32R501 MCU
評論