【MCUXpresso for VS Code】-- 工程搭建后期维护

​ 基于上一篇文章【MCUXpresso for VS Code】 – 基于VSCode搭建nxp mcu工程_

本章将介绍工程搭建完成后,后期维护问题。

1.MCUXpresso 插件窗口

请添加图片描述

该窗口,通常用在编译调试,工程导入导出等场合。编译和调试除了点击图标外,也可以按F7F5执行相关操作

2.CMAKE 插件窗口

请添加图片描述

这里强烈建议安装CMAKE插件,我们可以通过插件窗口和CMakeLists.txt,查阅当前工程包含有哪些文件

3.CMakeLists.txt 文件添加和修改

请添加图片描述

CMakeLists.txt中,使用会很频繁,这里管理着我们的工程文件和需要输出的文件(如:bin srec hex 文件)等

# CROSS COMPILER SETTING
SET(CMAKE_SYSTEM_NAME Generic)
CMAKE_MINIMUM_REQUIRED (VERSION 3.10.0)

# THE VERSION NUMBER
SET (MCUXPRESSO_CMAKE_FORMAT_MAJOR_VERSION 2)
SET (MCUXPRESSO_CMAKE_FORMAT_MINOR_VERSION 0)

include(ide_overrides.cmake OPTIONAL)

if(CMAKE_SCRIPT_MODE_FILE)
  message("${MCUXPRESSO_CMAKE_FORMAT_MAJOR_VERSION}")
  return()
endif()


# ENABLE ASM
ENABLE_LANGUAGE(ASM)

SET(CMAKE_STATIC_LIBRARY_PREFIX)
SET(CMAKE_STATIC_LIBRARY_SUFFIX)

SET(CMAKE_EXECUTABLE_LIBRARY_PREFIX)
SET(CMAKE_EXECUTABLE_LIBRARY_SUFFIX)

# CURRENT DIRECTORY
SET(ProjDirPath ${CMAKE_CURRENT_SOURCE_DIR})

SET(EXECUTABLE_OUTPUT_PATH ${ProjDirPath}/${CMAKE_BUILD_TYPE})
SET(LIBRARY_OUTPUT_PATH ${ProjDirPath}/${CMAKE_BUILD_TYPE})


project(rt1176_rtos_app)

set(MCUX_BUILD_TYPES debug release sdram_debug sdram_release flexspi_nor_debug flexspi_nor_release)

set(MCUX_SDK_PROJECT_NAME rt1176_rtos_app.elf)

if (NOT DEFINED SdkRootDirPath)
    SET(SdkRootDirPath ${ProjDirPath}/../../../../../..)
endif()

include(${ProjDirPath}/flags.cmake)

include(${ProjDirPath}/config.cmake)

add_executable(${MCUX_SDK_PROJECT_NAME} 
"${ProjDirPath}/../evkmimxrt1170_connect_cm4_cm7side.jlinkscript"
"${ProjDirPath}/../FreeRTOSConfig.h"
# "${ProjDirPath}/../pin_mux.c"
# "${ProjDirPath}/../pin_mux.h"
"${ProjDirPath}/../dcd.c"
"${ProjDirPath}/../dcd.h"
# "${ProjDirPath}/../board.c"
# "${ProjDirPath}/../board.h"
# "${ProjDirPath}/../clock_config.c"
# "${ProjDirPath}/../clock_config.h"
# 包含相关用户文件
#xapp
"${ProjDirPath}/../xapp/main.c"
"${ProjDirPath}/../xapp/xAPP_MainTask.c"
"${ProjDirPath}/../xapp/xAPP_KeyDeal.c"
#xgui
"${ProjDirPath}/../xgui/lv_conf.h"
"${ProjDirPath}/../xgui/lvgl_support.c"
"${ProjDirPath}/../xgui/lvgl_support.h"
"${ProjDirPath}/../xgui/xGUI_MainTask.c"
"${ProjDirPath}/../xgui/xGUI_MainTask.h"
#xsys 
"${ProjDirPath}/../xsys/xSYS_KeyScan.c"
"${ProjDirPath}/../xsys/xSYS_KeyScan.h"
"${ProjDirPath}/../xsys/xSYS_Encoder.c"
"${ProjDirPath}/../xsys/xSYS_Encoder.h"
"${ProjDirPath}/../xsys/xSYS_ST7789.c"
"${ProjDirPath}/../xsys/xSYS_ST7789.h"
#xbsp 
"${ProjDirPath}/../xbsp/xBSP_Config.c"
"${ProjDirPath}/../xbsp/xBSP_Config.h"
"${ProjDirPath}/../xbsp/xBSP_MPU.c"
"${ProjDirPath}/../xbsp/xBSP_MPU.h"
"${ProjDirPath}/../xbsp/xBSP_Interrupt.c"
"${ProjDirPath}/../xbsp/xBSP_Interrupt.h"
"${ProjDirPath}/../xbsp/xBSP_Gpio.c"
"${ProjDirPath}/../xbsp/xBSP_Gpio.h"
"${ProjDirPath}/../xbsp/xBSP_Encoder.c"
"${ProjDirPath}/../xbsp/xBSP_Encoder.h"
"${ProjDirPath}/../xbsp/xBSP_SPI.c"
"${ProjDirPath}/../xbsp/xBSP_SPI.h"
)

target_include_directories(${MCUX_SDK_PROJECT_NAME} PRIVATE
    ${ProjDirPath}/..
    ${ProjDirPath}/../xbsp
    ${ProjDirPath}/../xsys
    ${ProjDirPath}/../xapp  
    ${ProjDirPath}/../xgui   
)

#rtos
set_source_files_properties("${ProjDirPath}/../FreeRTOSConfig.h" PROPERTIES COMPONENT_CONFIG_FILE "middleware_freertos-kernel_template")
#lvgl
set_source_files_properties("${ProjDirPath}/../lv_conf.h" PROPERTIES COMPONENT_CONFIG_FILE "middleware_lvgl_template")
set_source_files_properties("${ProjDirPath}/../lvgl_support.h" PROPERTIES COMPONENT_CONFIG_FILE "middleware_lvgl_template")
set_source_files_properties("${ProjDirPath}/../lvgl_support.c" PROPERTIES COMPONENT_CONFIG_FILE "middleware_lvgl_template")


include(${SdkRootDirPath}/devices/MIMXRT1176/all_lib_device.cmake)

IF(NOT DEFINED TARGET_LINK_SYSTEM_LIBRARIES)  
    SET(TARGET_LINK_SYSTEM_LIBRARIES "-lm -lc -lgcc -lnosys")  
ENDIF()  

TARGET_LINK_LIBRARIES(${MCUX_SDK_PROJECT_NAME} PRIVATE -Wl,--start-group)

target_link_libraries(${MCUX_SDK_PROJECT_NAME} PRIVATE ${TARGET_LINK_SYSTEM_LIBRARIES})

TARGET_LINK_LIBRARIES(${MCUX_SDK_PROJECT_NAME} PRIVATE -Wl,--end-group)

# 编译输出文件
ADD_CUSTOM_COMMAND(TARGET ${MCUX_SDK_PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -Oihex ${EXECUTABLE_OUTPUT_PATH}/${MCUX_SDK_PROJECT_NAME} ${EXECUTABLE_OUTPUT_PATH}/rt1176_rtos_app.hex 
COMMAND ${CMAKE_OBJCOPY} -Obinary ${EXECUTABLE_OUTPUT_PATH}/${MCUX_SDK_PROJECT_NAME} ${EXECUTABLE_OUTPUT_PATH}/rt1176_rtos_app.bin
COMMAND ${CMAKE_OBJCOPY} -Osrec ${EXECUTABLE_OUTPUT_PATH}/${MCUX_SDK_PROJECT_NAME} ${EXECUTABLE_OUTPUT_PATH}/rt1176_rtos_app.srec
)

set_target_properties(${MCUX_SDK_PROJECT_NAME} PROPERTIES ADDITIONAL_CLEAN_FILES "output.map;${EXECUTABLE_OUTPUT_PATH}/rt1176_rtos_app.bin")

4.config.cmake 文件添加和修改

请添加图片描述

config.cmake 用来添加相关驱动和组件等(配合CMakeLists.txt一起使用),具体信息文件头告诉我们可以查阅:all_lib_device.cmake

5.flags.cmake 文件添加和修改

请添加图片描述

flags.cmake 管理当前工程相关全局宏,优化等级等等功能

6.工程无法下载问题

有时候我们会遇到某些芯片无法下载,原因是下载算法不适配我们的Flash,这时候我们需要修改下载算法。这里拿rt1052举例,我们当前使用的flash是winbondw25qxx,用官方默认下载算法是无法下载的
请添加图片描述

首先根据 mcuxpresso-tools.json 文件,我们知道锁定设备名称为:MIMXRT1052xxxxB

请添加图片描述

C:\Program Files\SEGGER\JLink路径,打开 JLinkDevices.xml,添加设备:MIMXRT1052xxxxB 信息,使用下载算法:RT105x_W25Q.elf(当然也支持FLM文件)

添加完成后,我们就能将代码下载到Flash了

7.变量调试显示问题

vscode 调试默认变量显示是十进制的,十六进制需要添加 “,h”,八进制需要添加 “,o”

请添加图片描述

8.如何解决gdb实时监听变量痛点问题

在调试中,我们有些时候是需要程序全速跑起来的,本能有断点打扰,但是又需要监听某些变量。这时候我们可能就会感受到Keil IAR强大的调试功能是多么的好,但是在 MCUXpresso for VS Code中也是有办法实时调试的。如果你使用JLink调试,这里推荐Segger RTT,硬件接口只需要SWD接口,无需占用串口,无需SWO引脚,实现日志printf输出。请添加图片描述
程序异常追踪(CmBacktrace 和 segger rtt)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值