元驭机器人元驭机器人Hall 传感器教学下载原文件
1set(CMAKE_SYSTEM_NAME      Generic)2set(CMAKE_SYSTEM_PROCESSOR arm)3set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)4set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf")5set(CMAKE_EXECUTABLE_SUFFIX_C   ".elf")6set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf")78# CMAKE_SYSTEM_* must be set on every toolchain load. Flags and find_* must not.9if(HALL_ARM_TOOLCHAIN_CONFIGURED)10    return()11endif()12set(HALL_ARM_TOOLCHAIN_CONFIGURED TRUE)1314if(CMAKE_HOST_WIN32)15    set(_HALL_HOST_EXE ".exe")16else()17    set(_HALL_HOST_EXE "")18endif()1920# Ninja is often bundled with CLion and is not on PATH.21if(NOT CMAKE_MAKE_PROGRAM)22    set(_HALL_NINJA_DIRS "")23    if(CMAKE_HOST_WIN32)24        file(GLOB _HALL_NINJA_DIRS25            "C:/Program Files/JetBrains/CLion */bin/ninja/win/x64"26            "C:/Program Files (x86)/JetBrains/CLion */bin/ninja/win/x64"27            "D:/Program Files/JetBrains/CLion */bin/ninja/win/x64"28            "D:/JetBrains/CLion */bin/ninja/win/x64"29            "$ENV{LOCALAPPDATA}/Programs/CLion/bin/ninja/win/x64"30            "D:/ClionProject/YFOCV3_LITE/tools/ninja"31        )32        if(_HALL_NINJA_DIRS)33            list(SORT _HALL_NINJA_DIRS COMPARE NATURAL ORDER DESCENDING)34        endif()35    endif()3637    find_program(CMAKE_MAKE_PROGRAM38        NAMES ninja ninja.exe39        PATHS ${_HALL_NINJA_DIRS}40        DOC "Ninja build tool"41    )42endif()4344set(_HALL_ARM_HINTS "")45if(ARM_NONE_EABI_TOOLCHAIN_PATH)46    list(APPEND _HALL_ARM_HINTS "${ARM_NONE_EABI_TOOLCHAIN_PATH}")47endif()48if(DEFINED ENV{ARM_NONE_EABI_TOOLCHAIN_PATH})49    list(APPEND _HALL_ARM_HINTS "$ENV{ARM_NONE_EABI_TOOLCHAIN_PATH}")50endif()5152if(CMAKE_HOST_WIN32)53    file(GLOB _HALL_ARM_GLOBS54        "D:/GD32EB*/GD32EB*/GD32EB/plugins/com.gd.tools_*/Tools/ARMEmbeddedGCC/bin"55        "D:/GD32EB_v1.5.11_Rel/GD32EB_v1.5.11_Rel/GD32EB/plugins/com.gd.tools_*/Tools/ARMEmbeddedGCC/bin"56        "C:/GD32EB*/GD32EB*/GD32EB/plugins/com.gd.tools_*/Tools/ARMEmbeddedGCC/bin"57        "D:/GD32EB*/GD32EB*/GD32EB/plugins/com.gd.tools.stdarmgcc*/Tools/StdARMGCC*/bin"58        "D:/GD32EB*/GD32EB*/GD32EB/plugins/com.gd.tools.gdarmgcc*/Tools/GdARMGCC*/bin"59        "D:/ClionProject/YFOCV3_LITE/tools/arm-gnu/bin"60        "D:/ClionProject/YFOCV3_LITE/tools/arm-gnu/*/bin"61        "C:/ST/STM32CubeIDE*/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.*/tools/bin"62        "D:/ST/STM32CubeIDE*/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.*/tools/bin"63        "C:/Program Files/Arm GNU Toolchain arm-none-eabi/*/bin"64        "C:/Program Files (x86)/Arm GNU Toolchain arm-none-eabi/*/bin"65        "C:/Program Files (x86)/GNU Arm Embedded Toolchain/*/bin"66    )67    if(_HALL_ARM_GLOBS)68        list(SORT _HALL_ARM_GLOBS COMPARE NATURAL ORDER DESCENDING)69        list(APPEND _HALL_ARM_HINTS ${_HALL_ARM_GLOBS})70    endif()71endif()7273# Prefer the GD32EB toolchain used by this project, then any other ARM GCC.74set(_HALL_GD32_GCC_HINTS "")75if(CMAKE_HOST_WIN32)76    file(GLOB _HALL_GD32_GCC_HINTS77        "D:/GD32EB_v1.5.11_Rel/GD32EB_v1.5.11_Rel/GD32EB/plugins/com.gd.tools_*/Tools/ARMEmbeddedGCC/bin"78        "D:/GD32EB*/GD32EB*/GD32EB/plugins/com.gd.tools_*/Tools/ARMEmbeddedGCC/bin"79        "C:/GD32EB*/GD32EB*/GD32EB/plugins/com.gd.tools_*/Tools/ARMEmbeddedGCC/bin"80    )81endif()82find_program(HALL_ARM_GCC83    NAMES arm-none-eabi-gcc arm-none-eabi-gcc.exe84    PATHS ${_HALL_GD32_GCC_HINTS}85    NO_DEFAULT_PATH86    DOC "ARM GCC cross compiler"87)88if(NOT HALL_ARM_GCC)89    find_program(HALL_ARM_GCC90        NAMES arm-none-eabi-gcc arm-none-eabi-gcc.exe91        PATHS ${_HALL_ARM_HINTS}92        DOC "ARM GCC cross compiler"93    )94endif()9596if(NOT HALL_ARM_GCC)97    message(FATAL_ERROR98        "arm-none-eabi-gcc not found.\n"99        "Install GD32EB, or set ARM_NONE_EABI_TOOLCHAIN_PATH to the toolchain bin directory."100    )101endif()102103get_filename_component(HALL_ARM_TOOLCHAIN_DIR "${HALL_ARM_GCC}" DIRECTORY)104105find_program(HALL_ARM_GXX106    NAMES arm-none-eabi-g++ arm-none-eabi-g++.exe107    HINTS "${HALL_ARM_TOOLCHAIN_DIR}"108    NO_DEFAULT_PATH109)110find_program(HALL_ARM_OBJCOPY111    NAMES arm-none-eabi-objcopy arm-none-eabi-objcopy.exe112    HINTS "${HALL_ARM_TOOLCHAIN_DIR}"113    NO_DEFAULT_PATH114)115find_program(HALL_ARM_SIZE116    NAMES arm-none-eabi-size arm-none-eabi-size.exe117    HINTS "${HALL_ARM_TOOLCHAIN_DIR}"118    NO_DEFAULT_PATH119)120121if(NOT HALL_ARM_GXX)122    set(HALL_ARM_GXX "${HALL_ARM_TOOLCHAIN_DIR}/arm-none-eabi-g++${_HALL_HOST_EXE}")123endif()124if(NOT HALL_ARM_OBJCOPY)125    set(HALL_ARM_OBJCOPY "${HALL_ARM_TOOLCHAIN_DIR}/arm-none-eabi-objcopy${_HALL_HOST_EXE}")126endif()127if(NOT HALL_ARM_SIZE)128    set(HALL_ARM_SIZE "${HALL_ARM_TOOLCHAIN_DIR}/arm-none-eabi-size${_HALL_HOST_EXE}")129endif()130131set(CMAKE_C_COMPILER   "${HALL_ARM_GCC}"     CACHE FILEPATH "C compiler" FORCE)132set(CMAKE_ASM_COMPILER "${HALL_ARM_GCC}"     CACHE FILEPATH "ASM compiler" FORCE)133set(CMAKE_CXX_COMPILER "${HALL_ARM_GXX}"     CACHE FILEPATH "CXX compiler" FORCE)134set(CMAKE_LINKER       "${HALL_ARM_GXX}"     CACHE FILEPATH "Linker" FORCE)135set(CMAKE_OBJCOPY      "${HALL_ARM_OBJCOPY}" CACHE FILEPATH "objcopy" FORCE)136set(CMAKE_SIZE         "${HALL_ARM_SIZE}"    CACHE FILEPATH "size" FORCE)137138message(STATUS "ARM GCC: ${HALL_ARM_GCC}")139if(CMAKE_MAKE_PROGRAM)140    message(STATUS "Ninja:   ${CMAKE_MAKE_PROGRAM}")141endif()142143# GD32E230G6: Cortex-M23, no FPU. Match gcc_startup/startup_gd32e23x.S (.fpu softvfp).144set(TARGET_FLAGS "-mcpu=cortex-m23 -mthumb -mfloat-abi=soft")145146set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${TARGET_FLAGS}")147set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections")148149set(CMAKE_C_FLAGS_DEBUG          "-O0 -g3"       CACHE STRING "Debug C flags" FORCE)150set(CMAKE_C_FLAGS_RELEASE        "-Os -g"        CACHE STRING "Release C flags" FORCE)151set(CMAKE_C_FLAGS_RELWITHDEBINFO "-Os -g"        CACHE STRING "RelWithDebInfo C flags" FORCE)152set(CMAKE_C_FLAGS_MINSIZEREL     "-Os -DNDEBUG"  CACHE STRING "MinSizeRel C flags" FORCE)153154set(CMAKE_CXX_FLAGS_DEBUG          "${CMAKE_C_FLAGS_DEBUG}"          CACHE STRING "Debug CXX flags" FORCE)155set(CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_C_FLAGS_RELEASE}"        CACHE STRING "Release CXX flags" FORCE)156set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}" CACHE STRING "RelWithDebInfo CXX flags" FORCE)157set(CMAKE_CXX_FLAGS_MINSIZEREL     "${CMAKE_C_FLAGS_MINSIZEREL}"     CACHE STRING "MinSizeRel CXX flags" FORCE)158159set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp")160set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS}")161162set(CMAKE_C_LINK_FLAGS "${TARGET_FLAGS}")163set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} --specs=nano.specs")164set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--gc-sections")165set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -Wl,--print-memory-usage")166set(CMAKE_CXX_LINK_FLAGS "${CMAKE_C_LINK_FLAGS}")