[活动专区] 【AT-START-L021测评】3、配置VSCODE+CMAKE开发环境

[复制链接]
 楼主| sujingliang 发表于 2024-11-24 21:05 | 显示全部楼层 |阅读模式
本帖最后由 sujingliang 于 2024-11-24 21:08 编辑

AT-START-L021 SDK中好像没有提供gcc+vscode+cmake开发环境相关配置。所以...

用过gcc+vscode+cmake组合的开发环境,一般就不太爱用keil、IAR,因为实在是太香了。

最早可能为了编译AI-M61或是PICO安装了各个软件和扩展,所以已经配置好了环境。

要安装哪些软件记得可能不太清楚:VSCODE、CMAKE、mingw、nijia,gcc多个版本,还有VSCODE扩展C/C++、CMake、CMakeTools。
这方面网上相关资料比较多,安装相对复杂,要花一些时间,但安装一次一劳永逸。

如果在环境就绪的情况下,面对一个新的SDK,其实就是写CMakeLists.txt的工作啦。
CMakeLists就是一个生成makefile的描述文件,比直接写makefile方便一些。

1、在AT32L021_Firmware_Library_V2.0.5下建一个CMakeLists.txt,内容如下
  1. #THIS FILE IS AUTO GENERATED FROM THE TEMPLATE! DO NOT CHANGE!
  2. set(CMAKE_SYSTEM_NAME Generic)
  3. set(CMAKE_SYSTEM_VERSION 1)
  4. cmake_minimum_required(VERSION 3.20)

  5. # specify cross compilers and tools
  6. set(CMAKE_C_COMPILER arm-none-eabi-gcc)
  7. set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
  8. set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
  9. set(CMAKE_AR arm-none-eabi-ar)
  10. set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
  11. set(CMAKE_OBJDUMP arm-none-eabi-objdump)
  12. set(SIZE arm-none-eabi-size)
  13. set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

  14. # project settings
  15. project(AT32L021_DEMO  C CXX ASM)
  16. set(CMAKE_CXX_STANDARD 17)
  17. set(CMAKE_C_STANDARD 11)


  18. # add_compile_options(-mcpu=cortex-m33 -mthumb -mthumb-interwork)
  19. # add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)

  20. # uncomment to mitigate c++17 absolute addresses warnings
  21. #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-register")
  22. if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
  23.     message(VERBOSE "Maximum optimization for speed")
  24.     add_compile_options(-Ofast)
  25. elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
  26.     message(VERBOSE "Maximum optimization for speed, debug info included")
  27.     add_compile_options(-Ofast -g)
  28. elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
  29.     message(VERBOSE "Maximum optimization for size")
  30.     add_compile_options(-Os)
  31. else ()
  32.     message(VERBOSE "Minimal optimization, debug info included")
  33.     add_compile_options(-Og -g)
  34. endif ()

  35. #添加宏定义
  36. add_definitions(-DUSE_STDPERIPH_DRIVER -DCUSTOM_HSE_VAL)

  37. add_subdirectory(project/at_start_l021/examples/gpio/led_toggle)

前面的内容各个SDK基本都一样,
最后一行
add_subdirectory(project/at_start_l021/examples/gpio/led_toggle)
将led_toggle加入cmake管理,如果想编译其他demo,也需要做add_subdirectory这个操作。

2、在project/at_start_l021/examples/gpio/led_toggle下建一个CMakeLists.txt,内容如下
  1. cmake_minimum_required(VERSION 3.20)

  2. # 获取当前源目录的绝对路径
  3. set(CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})

  4. # 提取当前源目录的名称(即最后一个斜杠/或反斜杠\之后的部分)
  5. get_filename_component(CURRENT_DIR_NAME ${CURRENT_SOURCE_DIR} NAME)

  6. #project(gpio_basic)
  7. project(${CURRENT_DIR_NAME})

  8. add_compile_options(-mcpu=cortex-m0 -mthumb -mthumb-interwork)
  9. add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)



  10. #添加宏定义
  11. add_definitions(-DUSE_STDPERIPH_DRIVER -DCUSTOM_HSE_VAL)


  12. set(PrjDirPath ${CMAKE_CURRENT_SOURCE_DIR})


  13. #添加头文件路径,即.h文件
  14. include_directories(
  15.     ${PrjDirPath}/../../../../../libraries/drivers/inc
  16.     ${PrjDirPath}/../../../../../libraries/cmsis/cm0plus/core_support
  17.     ${PrjDirPath}/../../../../../libraries/cmsis/cm0plus/device_support
  18.     ${PrjDirPath}/../../../../../project/at32l021_board
  19.     ${PrjDirPath}/.
  20.     ${PrjDirPath}/inc
  21. )

  22. #添加源文件路径,即.c或者.s文件
  23. file(GLOB SOURCES
  24.     ${PrjDirPath}/../../../../../libraries/cmsis/cm0plus/device_support/*.c
  25.     ${PrjDirPath}/../../../../../libraries/cmsis/cm0plus/device_support/startup/gcc/*.s
  26.     ${PrjDirPath}/../../../../../libraries/drivers/src/*.c
  27.     ${PrjDirPath}/../../../../../project/at32l021_board/*.c
  28.     ${PrjDirPath}/src/*.c
  29. )

  30. #AT32L021x8_FLASH.ld的连接脚本路径
  31. set(LINKER_SCRIPT ${PrjDirPath}/../../../../../libraries/cmsis/cm0plus/device_support/startup/gcc/linker/AT32L021x8_FLASH.ld)

  32. add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
  33. #选择cortex-m3内核
  34. add_link_options(-mcpu=cortex-m0 -mthumb -mthumb-interwork)
  35. add_link_options(-T ${LINKER_SCRIPT})

  36. add_link_options(-specs=nano.specs -specs=nosys.specs -u _printf_float)



  37. add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})

  38. target_compile_definitions(${PROJECT_NAME}.elf
  39.     PRIVATE AT32L021C8T7
  40.     PRIVATE USE_STDPERIPH_DRIVER
  41.         PRIVATE AT_START_L021_V1
  42. )


  43. target_link_libraries(${PROJECT_NAME}.elf
  44.     -Wl,--start-group
  45.     debug m
  46.     debug c
  47.     debug gcc
  48.     debug nosys
  49.     optimized m
  50.     optimized c
  51.     optimized gcc
  52.     optimized nosys
  53.     -Wl,--end-group
  54. )



  55. set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
  56. set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)

  57. add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
  58.         COMMAND ${CMAKE_OBJCOPY} -Oihex [        DISCUZ_CODE_221        ]lt;TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
  59.         COMMAND ${CMAKE_OBJCOPY} -Obinary [        DISCUZ_CODE_221        ]lt;TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
  60.         COMMENT "Building ${HEX_FILE}
  61. Building ${BIN_FILE}")


主要是配置好头文件和源文件的路径,和KEIL相比有一个好处是用通配符就可以包括一个目录下的所有*.c文件。
还要配置好ld的连接脚本路径,gcc下的ld相当于keil下用sct。

3、在AT32L021_Firmware_Library_V2.0.5下右键“通过 code打开”
或者在命令行下键入code . 进入VSCODE
因为目录中CMakeLists.txt的存在,导致nijia会自动配置环境,一般自动配置的过程都会失败。
可以打开扩展CMake Tools,进行定制化配置。配置编译工具,生成的目标等
3.png
配置编译工具,
3.png
选择编译目标
4.png
按下面这个按钮编译
5.png
如果正常,会出现如下信息。
6.png

4、关于烧录
可以选择的烧录手段:
1)雅特力官方提供的图形化烧录工具。
2)第三方烧录工具,没试过,可能power writer可以。
3)openocd
4)pyocd

您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

146

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部