国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

使用vscode和cmake工具開發極海G32R501 MCU

Geehy極海半導體 ? 來源:Geehy極海半導體 ? 2025-11-25 14:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

《APM32芯得》系列內容為用戶使用APM32系列產品的經驗總結,均轉載自21ic論壇極海半導體專區,全文未作任何修改,未經原文作者授權禁止轉載。

概述

目前極海官方提供的 IDE 開發環境有 Keil/IAR/Eclipse。都能很好的完成開發,但是 VS Code 配合 CMake 工具是更加“現代”的C/C++開發環境,本文提供了在 VS Code 環境下的開發經驗,以供參考。

準備工作

必需的軟件有:

cmake: 官網 https://cmake.org

ninja: 官網 https://ninja-build.org

VS Code:官網 https://code.visualstudio.com

arm-clang 編譯套件,keil 自帶~

請從上述網站下載所需軟件,版本采用最新版即可。此外,為了更好的使用 VS Code,還需要安裝兩個擴展:

C/C++ Extension Pack

CMake Tools

這里不再贅述擴展的安裝方法。

Note:

ninja 的功能,也可以由 make 提供。

文件組織

為便于敘述,本文約定了如下的文件組織形式:

4511a1ec-c527-11f0-8c8f-92fbcf53809c.png

下面一一描述各項內容:

.vscode 文件夾

VS Code 的配置文件夾。

cmake 文件夾

針對編譯器的必需文件。

G32R501_SDK 文件夾

G32R501 SDK 庫,直接使用極海官網提供的 SDK 庫。解壓縮文件時請確保文件層級與上文所列一致。

projects 文件夾

用戶項目文件夾。

子目錄需要滿足以下的目錄結構:

├─INC --- 頭文件目錄

└─SRC --- C 文件 目錄

如果實際目錄結構與上面的不一致,則需要修改 CMakeLists.txt 文件。

CMakeLists.txt 文件

CMake 構建所必需的文件,下一節會詳細說明。

詳細說明

CMakeLists.txt 文件

CMake 構建 C/C++ 工程,是從工程根目錄(或者指定的某個目錄)下的 CMakeLists.txt 文件開始。CMakeLists.txt 描述了構建工程的源代碼,編譯選項。CMake 工具根據這個文件生成 Makefile 或者 ninja.build 文件。最后由 make 工具或者 ninja 工具執行編譯工作。

CMakeLists.txt 遵循 CMake 相關語法,具體可以參考官方說明或者相應教程。這里貼出了 CMakeLists.txt 的內容。文中以“#”開始的行為注釋行,可以參考注釋行理解相關內容。

# Geehy, G32R5xx

cmake_minimum_required(VERSION 3.20)

cmake_policy(SET CMP0123 NEW)

project(g32r5xx_fw)

set(TARGET_NAME g32r5xx_fw)

# 檢查 SDK 目錄

set(SDK_ROOT G32R5xx_SDK)

get_filename_component(SDK_ROOT_ABS ${SDK_ROOT} ABSOLUTE)

if(NOT EXISTS ${SDK_ROOT_ABS})

message(FATAL_ERROR "SDK_ROOT: "${SDK_ROOT}" is not exists")

endif()

# 檢查 APP 目錄

get_filename_component(APP_ROOT_ABS ${APP_ROOT} ABSOLUTE)

if(NOT EXISTS ${APP_ROOT_ABS})

message(FATAL_ERROR "APP_ROOT: "${APP_ROOT}" is not exists")

endif()

# 檢查分散加載文件

set(SCATTER_FILE_ABS ${SDK_ROOT_ABS}/device_support/g32r501/common/sct/${SCATTER_FILE})

if(NOT EXISTS ${SCATTER_FILE_ABS})

message(FATAL_ERROR "SCATTER_FILE: "${SCATTER_FILE_ABS}" is not exists")

endif()

# 打印項目信息

message(STATUS "LIBRARY_TYPE: ${LIBRARY_TYPE}")

message(STATUS " SDK_ROOT: ${SDK_ROOT_ABS}")

message(STATUS " APP_ROOT: ${APP_ROOT_ABS}")

message(STATUS "SCATTER_FILE: ${SCATTER_FILE_ABS}")

# 編譯選項

set(MCPU_FLAGS "-mcpu=cortex-m52+cdecp0+pacbti -mfloat-abi=hard -fno-rtti -funsigned-char -fshort-enums -fshort-wchar -mlittle-endian -ffunction-sections")

set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} ${MCPU_FLAGS}")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MCPU_FLAGS}")

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --strict --scatter ${SCATTER_FILE_ABS} --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols --info sizes --info totals --info unused --info veneers --list project.map")

# 源碼

file(GLOB APP_SRC ${APP_ROOT_ABS}/source/*c)

add_executable(${TARGET_NAME}

${APP_SRC}

)

set_target_properties(${TARGET_NAME} PROPERTIES SUFFIX ".axf")

# 宏定義

target_compile_definitions(${TARGET_NAME} PRIVATE "-DG32R501_EVAL -D__CORE_CPU0__ -D__G32R501XX__ -D__G32R501__ -D__ARM_ARCH_8_1M_MAIN___ -D__ARM_TARGET_COPROC")

# include 目錄

target_include_directories(${TARGET_NAME} PRIVATE ${APP_ROOT}/INC)

target_include_directories(${TARGET_NAME} PRIVATE ${APP_ROOT}/include)

target_include_directories(${TARGET_NAME} PRIVATE ${SDK_ROOT_ABS}/device_support/g32r501/common/device/Geehy)

target_include_directories(${TARGET_NAME} PRIVATE ${SDK_ROOT_ABS}/device_support/g32r501/common/device/CMSIS/Core/Include)

target_include_directories(${TARGET_NAME} PRIVATE ${SDK_ROOT_ABS}/device_support/g32r501/common/device/Geehy/system_eval/include)

target_include_directories(${TARGET_NAME} PRIVATE ${SDK_ROOT_ABS}/device_support/g32r501/common/include)

target_include_directories(${TARGET_NAME} PRIVATE ${SDK_ROOT_ABS}/driverlib/g32r501/driverlib)

target_include_directories(${TARGET_NAME} PRIVATE ${SDK_ROOT_ABS}/driverlib/g32r501/driverlib/inc)

# SDK 源碼

file(GLOB_RECURSE CMSIS_SRC ${SDK_ROOT_ABS}/device_support/g32r501/common/device/Geehy/*.c)

target_sources(${TARGET_NAME} PRIVATE ${CMSIS_SRC})

file(GLOB DRIVERLIB_SRC ${SDK_ROOT_ABS}/driverlib/g32r501/driverlib/*.c)

target_sources(${TARGET_NAME} PRIVATE ${DRIVERLIB_SRC})

target_sources(${TARGET_NAME} PRIVATE ${SDK_ROOT_ABS}/device_support/g32r501/common/source/device.c)

# devicelib 類型項目必須添加的源碼

if(${LIBRARY_TYPE} STREQUAL "device_lib")

file(GLOB DEVICE_SUPPORT_SRC ${SDK_ROOT_ABS}/device_support/g32r501/common/source/*.c)

list(APPEND DEVICE_SUPPORT_SRC ${SDK_ROOT_ABS}/device_support/g32r501/common/g32r501_globalvariabledefs.c)

target_include_directories(${TARGET_NAME} PRIVATE ${SDK_ROOT_ABS}/device_support/g32r501/headers/include)

target_sources(${TARGET_NAME} PRIVATE ${DEVICE_SUPPORT_SRC})

endif()

# 生成 HEX 文件

add_custom_command(TARGET ${TARGET_NAME} POST_BUILD

COMMAND ${FROMELF_EXECUTABLE} --i32 --output ${TARGET_NAME}.hex [ DISCUZ_CODE_50 ]lt;TARGET_FILE:${TARGET_NAME}>

COMMENT "Creating HEX file")

# 生成 BIN 文件

add_custom_command(TARGET ${TARGET_NAME} POST_BUILD

COMMAND ${FROMELF_EXECUTABLE} --bin --output ${TARGET_NAME}.bin [ DISCUZ_CODE_50 ]lt;TARGET_FILE:${TARGET_NAME}>

COMMENT "Creating HEX file")

工程構建

使用 CMake 搭建的開發C/C++工程,編譯前需要先進行配置(configure)再進行編譯。

配置

執行類似下面的命令行可以配置一個工程:

cmake -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_TOOLCHAIN_FILE:STRING=cmake/g32r501.cmake -DLIBRARY_TYPE:STRING=device_lib -DSCATTER_FILE:STRING=g32r501xe_cbus_flash.sct -DAPP_ROOT:STRING=projects/app1 -B_build -G Ninja

參數說明:

CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE 可選參數,用于生成 compile_commands.json 文件,便于 VS Code 開發使用。

CMAKE_TOOLCHAIN_FILE:STRING=cmake/g32r501.cmake 必選參數,指定 MCU 是 g32r501。

CMAKE_BUILD_TYPE:STRING=Debug 構建類型,可選的值有:Debug,Release,RelWithDebInfo 和 MinSizeRel,具體參考 cmake 文檔。

LIBRARY_TYPE:STRING=device_lib SDK 庫類型,可選值有:device_lib,driver_lib。

SCATTER_FILE:STRING=g32r501xe_cbus_flash.sct 分散加載文件的文件名,參考 G32R501_SDK*device_supportg32r501commonsct 目錄。

APP_ROOT:STRING=projects/app1 用戶項目目錄

打開命令行窗口,切換到工程根目錄。執行上述命令前,請先定義一個環境變量 ARMCLANG_PATH,值是 armclang.exe 所在目錄:

set ARMCLANG_PATH=C:UsersAppDataLocalKeil_v5ARMARMCLANGin

其中 C:UsersAppDataLocalKeil_v5ARMARMCLANGin 就是我的電腦上 ARM-CLANG 編譯器的目錄,請替換成實際值。

編譯

在命令行里執行如下命令,就可以編譯整個工程:

ninja -C _build

編譯的固件會在 _build 文件夾下:g32r5xx_fw.hex 和 g32r5xx_fw.bin。

在 VS Code 里編輯和編譯

“一個小手術”

為了能讓 VS Code 更好地工作,我們在打開 VS Code 前,先弄好 VS Code 的配置。在 .vsode 下,用文本編輯器創建 settings.json 文件,并寫入如下內容:

456f3794-c527-11f0-8c8f-92fbcf53809c.png

文件中cmake.configureArgs部分內容與前文所述的“配置”部分大致相同,作用也就很明顯了。這些參數控制著 VS Code 更好的為我們工作。

經過前面的步驟,就可以啟動 VS Code 打開工程所在根目錄,就可以在 VS Code 里愉快地編碼了。

更便捷地使用 VS Code

VS Code 提供了“任務”機制能讓我們更好地進行開發。這里列舉作者認為非常有助于提高效率的一個功能:實現“一鍵下載”。

點擊 VS Code 菜單【終端】→ 【配置任務...】,在彈出的下拉列表里,選擇【使用模板創建 tasks.json 文件】→ 【Others 運行任意外部命令的示例】。操作完成后會在 .vscode 目錄下生成一個 tasks.json 文件,并打開。編輯這個文件:

45cf90d0-c527-11f0-8c8f-92fbcf53809c.png

tasks.json 文件里 tasks列表定義了若干可執行的命令及響應的命令參數。上述示例中名為 “Flash(MDK)” 的任務實際調用 keil 進行燒錄;“Flash(JLINK)”任務是調用 JLink 進行燒錄。

開發人員可以照例編排其他任務以提高開發效率。

附錄

CMakeLists.txt 一些語法

變量

set(TARGET_NAME g32r5xx_fw)

上面的 set 語句定義了一個名為 TARGET_NAME 的變量,賦值:g32r5xx_fw。需要使用變量的值,需要用 ${} 包含變量名,如:${TARGET_NAME}。

顯示/打印信息

message(FATAL_ERROR "SCATTER_FILE "${SCATTER_FILE}" is not exists")message(STATUS "TOP_DIR: ${TOP_DIR}")

message 可以在配置過程中顯示/打印一些信息。如果是 FATAL_ERROR 類型的信息,表明發生嚴重錯誤,配置構建過程立即結束,配置失敗。

獲取文件夾下的源文件列表

file(GLOB APP_SRC ${APP_ROOT}/SRC/*.c)file(GLOB_RECURSE APP_SRC ${APP_ROOT}/SRC/*.c)

第一句獲取 ${APP_ROOT}/SRC 目錄下全部的 C 代碼文件。第二句獲取 ${APP_ROOT}/SRC 目錄及其子目錄下全部的 C 代碼文件(遞歸)。

如果只是個別文件,可以這樣寫:

set(APP_SRC ${APP_ROOT}/SRC/a.c ${APP_ROOT}/SRC/b.c ${APP_ROOT}/SRC/c.c)

一些內置的變量

cmake 有一些有用的內置變量:

CMAKE_SOURCE_DIR:指向頂級 CMakeLists.txt 文件所在的目錄,也稱為源目錄。

CMAKE_BINARY_DIR:指向構建目錄,即 CMake 構建的輸出目錄。

CMAKE_CURRENT_LIST_DIR: 當前 CMakeLists.txt 所在目錄。

CMAKE_BUILD_TYPE:指定構建類型,如 Debug、Release、RelWithDebInfo 和 MinSizeRel。

/// 全文完

注:文章作者在原帖中提供了代碼文件,有需要請至原文21ic論壇

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

    關注

    0

    文章

    364

    瀏覽量

    48767
  • 開發環境
    +關注

    關注

    1

    文章

    254

    瀏覽量

    17562
  • vscode
    +關注

    關注

    1

    文章

    171

    瀏覽量

    9022
  • 極海半導體
    +關注

    關注

    0

    文章

    197

    瀏覽量

    4825

原文標題:APM32芯得 EP.66 | 使用 vscode+cmake 開發 G32R501

文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導體】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    G32R501數據手冊# 內置FPU,支持 Arm Helium,實時控制 MCU

    G32R501實時控制MCU : 基本信息 : G32R5系列實時控制MCU搭載Arm v8
    的頭像 發表于 02-19 13:58 ?2864次閱讀
    <b class='flag-5'>極</b><b class='flag-5'>海</b><b class='flag-5'>G32R501</b>數據手冊# 內置FPU,支持 Arm Helium,實時控制 <b class='flag-5'>MCU</b>

    G32R501實時控制 MCU 跨域新境界丨面向新一代高效能高實時控制設備

    首款基于Arm? Cortex?-M52雙核架構的實時控制MCU——G32R501渠道
    發表于 01-07 18:06 ?1484次閱讀
    <b class='flag-5'>極</b><b class='flag-5'>海</b><b class='flag-5'>G32R501</b>實時控制 <b class='flag-5'>MCU</b> 跨域新境界丨面向新一代高效能高實時控制設備

    實時自控 精準調速 | G32R501 2.2kW高性能矢量變頻器參考方案

    和穩定性,同時降低能耗和排放。這些特性使其更符合國際節能減排目標要求。 2.2kW高性能 矢量變頻器參考方案介紹 G32R501 2
    發表于 03-10 18:18 ?1178次閱讀
    實時自控 精準調速 | <b class='flag-5'>極</b><b class='flag-5'>海</b><b class='flag-5'>G32R501</b> 2.2kW高性能矢量變頻器參考方案

    32 位 MCU 開發調試 ,基于 VS Code 插件實現芯 32 位 MCU 開發調試

    編譯/鏈接等腳本語法,只需要簡單配置參數、新建工程、增加代碼文件后,就可以開始編譯 和調試了。如果要生成靜態庫文件也只需要修改輸出格式,再編譯就可能生成.a 的文件。*附件:基于VSCode插件實現芯32位MCU
    發表于 05-16 10:46

    【CPKCOR-RA8D1】1、VSCODE+CMAKE開發環境搭建

    Configurator是為不使用e2 studio的用戶而專門設計的圖形配置工具,可以生成MDK,IAR或是CMAKE工程。 3、安裝VSCODE擴展Renesas Platform 安裝了Renesas
    發表于 10-09 16:17

    AN016基于CMAKE工具搭建GD32MCU開發環境

    AN016 基于CMAKE工具搭建GD32 MCU開發環境
    發表于 02-27 18:20 ?4次下載
    AN016基于<b class='flag-5'>CMAKE</b><b class='flag-5'>工具</b>搭建GD32<b class='flag-5'>MCU</b><b class='flag-5'>開發</b>環境

    于electronica 2024展示G32R5高性能實時控制MCU

    近日,在2024德國慕尼黑國際電子元器件博覽會(electronica 2024)上大放異彩,展示了其最新的G32R5高性能實時控制MCU。 在此次博覽會上,
    的頭像 發表于 12-16 13:42 ?1219次閱讀

    高效雙控 精準卓越 | G32R501低壓無感雙電機參考方案

    降低成本、提高系統可靠性以及簡化電機結構方面具有顯著優勢。 隨著無傳感器電機控制技術的逐步成熟,其在工業自動化、旋翼飛行器、空調外機等領域迎來廣闊的市場應用前景。緊跟行業技術發展趨勢,推出G32R501低壓無感雙
    發表于 01-16 16:12 ?631次閱讀
    高效雙控 精準卓越 | <b class='flag-5'>極</b><b class='flag-5'>海</b><b class='flag-5'>G32R501</b>低壓無感雙電機參考方案

    發布G32R5xx SDK,簡化MCU軟件遷移

    近日,正式推出了其最新的G32R5xx SDK(軟件開發工具包)。這款SDK以其高兼容性設計為核心亮點,旨在顯著簡化實時控制微控制器(MCU
    的頭像 發表于 02-18 13:57 ?1016次閱讀

    高效轉換 實時調控 | 基于G32R501的800W雙路MPPT微型逆變器參考方案

    ,更是推動綠色能源普及的重要技術載體。 推出G32R501 800W雙路MPPT微型逆變器參考方案,旨在以更高效、更智能的量產級技術方案,助力全球能源轉型。該方案通過G32R501
    發表于 02-26 11:07 ?534次閱讀
    高效轉換 實時調控 | 基于<b class='flag-5'>G32R501</b>的800W雙路MPPT微型逆變器參考方案

    半導體榮登2025中國IC設計Fabless100排行榜之TOP10微控制器公司

    近日,在“中國IC設計成就獎”頒獎典禮中,微上榜中國微控制器公司Top 10,G32R501實時控制MCU斬獲“2025年度MCU”獎,
    的頭像 發表于 04-01 09:43 ?1623次閱讀

    半導體全數字雙向電源參考方案助力能效躍升

    半導體憑借在工業應用領域深厚的技術積累,推出了基于G32R501實時控制MCU的全數字雙向電源參考方案,該方案具備高效率、高可靠、高轉換率、低噪聲和高性價比等特點,為企業應對關稅沖
    的頭像 發表于 04-12 14:15 ?846次閱讀

    半導體G32R501:面向具身機器人的高性能、高安全實時控制MCU/DSP

    要求。 ? ? 今天,在第十五屆松山湖中國IC創新高峰論壇中,珠海半導體有限公司實時控制MCU/DSP產品線高級產品經理盧鵬升帶來了面向具身機器人的高性能、高安全實時控制MCU/D
    發表于 05-13 12:12 ?1441次閱讀
    <b class='flag-5'>極</b><b class='flag-5'>海</b>半導體<b class='flag-5'>G32R501</b>:面向具身機器人的高性能、高安全實時控制<b class='flag-5'>MCU</b>/DSP

    G32R501工業六軸機械臂參考方案釋放工業4.0產業價值

    揮著重要作用,是現代工業自動化和智能化生產的核心工具。據Grand View Research數據分析,2024年全球工業機器人市場規模約為340億美元,預計2025年至2030年將以9.9%的復合年增長率持續增長,展現出巨大的市場潛力。
    發表于 06-23 13:52 ?1622次閱讀
    <b class='flag-5'>極</b><b class='flag-5'>海</b><b class='flag-5'>G32R501</b>工業六軸機械臂參考方案釋放工業4.0產業價值

    特來電攜手半導體推出G32R501T實時控制MCU

    聯合開發G32R501T實時控制MCU,這不僅是對AI智能充電與新能源領域核心技術的一次深度定義,更標志著高端電源主控芯片朝著自主化、智能化邁出堅實一步。
    的頭像 發表于 11-04 09:21 ?547次閱讀