基于上一篇文章【MCUXpresso for VS Code】 – 基于VSCode搭建nxp mcu工程_
本章将介绍工程搭建完成后,后期维护问题。
1.MCUXpresso 插件窗口
该窗口,通常用在编译调试,工程导入导出等场合。编译和调试除了点击图标外,也可以按F7和F5执行相关操作
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是winbond的w25qxx,用官方默认下载算法是无法下载的
首先根据 mcuxpresso-tools.json 文件,我们知道锁定设备名称为:MIMXRT1052xxxxB
在C:\Program Files\SEGGER\JLink路径,打开 JLinkDevices.xml,添加设备:MIMXRT1052xxxxB 信息,使用下载算法:RT105x_W25Q.elf(当然也支持FLM文件)
添加完成后,我们就能将代码下载到Flash了
未完待续。。。