使用Jlink GDBserver调试出现Starting target CPU...的问题

作者在尝试使用Windows10环境下CMake编译的项目时,遇到Keil界面和编码问题,以及J-LinkGDBServer与OpenOCD兼容性问题。尽管可以正常暂停和触发断点,但重置设置不起作用,引发关于高级GDB服务器配置失效的疑问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

keil的界面和编码体验太差了,还是回归jetbrain的怀抱吧
本来根据稚晖君博文配的好好的,但是默认的jlink驱动不支持openocd,换驱动明显又影响keil的使用(毕竟有个过度期),所以尝试改用gdbserver

0x01环境

windows10
clion2014.1
J-Link GDB Server V7.96d

0x02现象

触发下载的时候正常触发断点,重启调试一直在Starting target CPU…
在这里插入图片描述

0x03分析

在这里插入图片描述
能正常暂停程序,按重置MCU(第二个图案)能触发断点,分析为启动调试后未重置程序,查看配置,设置重置命令为始终,无效
在这里插入图片描述

0x04结论&疑问

出现这个log时正确的,说明整个链路正常运行,无非是多点一下重置;
但我的疑问是为什么在高级GDB服务器中的设置不生效,万望知晓的大佬告知,万分感谢

<think>好的,用户让我帮忙写一个在Mac电脑上CLion使用J-Link烧录的CMakeLists.txt。首先,我需要回顾之前的对话历史,看看用户之前遇到了什么问题。之前的错误是关于CMake构建时找不到目标Project,导致flash目标失败。用户可能现在想正确配置CLion项目,使用J-Link进行烧录,所以需要正确的CMakeLists.txt配置。 首先,我得确定用户的需求。他们需要的是在CLion中通过CMake配置J-Link的烧录命令。可能用户正在开发嵌入式项目,比如STM32或者其他ARM Cortex-M微控制器,使用J-Link作为烧录工具。Mac系统下,J-Link的命令行工具应该是存在的,用户需要将J-Link的命令集成到CMake中,方便在IDE中直接烧录。 接下来,我需要考虑如何构建CMakeLists.txt。通常,嵌入式项目需要生成hex或bin文件,然后使用J-Link的CLI工具进行烧录。所以,CMake的配置应该包括编译目标,生成相应的输出文件,然后添加自定义目标来执行烧录命令。 用户之前的错误是因为依赖的目标不存在,所以在新的配置中,必须确保add_custom_target的DEPENDS正确指向生成的可执行文件。例如,如果项目名为MyFirmware,那么add_executable应该生成这个目标,然后在add_custom_target(flash ...)中DEPENDS MyFirmware,这样才能确保编译完成后再烧录。 然后,J-Link的烧录命令在Mac上可能需要使用JLinkExe,通过脚本文件或者命令行参数执行。常用的方法是生成一个临时的J-Link脚本,包含连接目标、擦除、烧录、复位等命令,然后通过JLinkExe执行这个脚本。 另外,用户可能需要生成hex或bin文件,这可以通过CMake的add_custom_command来实现,例如在编译后使用arm-none-eabi-objcopy来转换格式。不过,如果他们的工具链已经配置好了,可能已经生成了这些文件,需要确认输出路径是否正确。 还需要考虑的是CMake的变量,比如${CMAKE_PROJECT_NAME}来自project()命令,确保目标名称一致。同时,烧录命令中的路径是否正确,比如固件文件的路径是否是构建目录下的输出文件。 此外,用户可能需要调试配置,比如在CLion中添加自定义目标,使得可以直接点击运行来烧录。所以,CMakeLists.txt中的add_custom_target(flash ...)会让CLion生成一个名为flash的目标,用户可以通过构建该目标来触发烧录。 最后,需要给出一些常见问题的解决方法,比如检查J-Link路径是否正确,确认设备类型和接口设置,以及如何处理权限问题,比如是否需要sudo执行,或者配置udev规则。同时提醒用户根据实际项目调整参数,比如芯片型号、接口类型、烧录地址等。 总结下来,步骤应该是:配置项目生成可执行文件,添加自定义命令生成烧录文件,添加自定义目标执行J-Link命令,并确保依赖关系正确。然后给出示例代码,并附上注意事项,帮助用户避免常见错误。</think>以下是一个针对**Mac系统 + CLion + J-Link烧录**的嵌入式开发项目`CMakeLists.txt`配置示例,包含详细注释和调试技巧: ```cmake cmake_minimum_required(VERSION 3.20) project(MyFirmware C CXX ASM) # 设置交叉编译工具链(根据实际路径修改) set(CMAKE_C_COMPILER "/usr/local/bin/arm-none-eabi-gcc") set(CMAKE_CXX_COMPILER "/usr/local/bin/arm-none-eabi-g++") set(CMAKE_ASM_COMPILER "/usr/local/bin/arm-none-eabi-gcc") set(CMAKE_OBJCOPY "/usr/local/bin/arm-none-eabi-objcopy") # 生成HEX/BIN文件函数(需在add_executable后调用) function(add_hex_bin_target TARGET) add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${TARGET}> ${TARGET}.hex COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${TARGET}> ${TARGET}.bin COMMENT "Generating HEX/BIN files" ) endfunction() # 添加可执行目标(假设源文件在src目录) add_executable(${PROJECT_NAME} src/main.c src/system_stm32f4xx.c # 其他源文件... ) # 生成HEX/BIN add_hex_bin_target(${PROJECT_NAME}) # J-Link烧录配置(关键部分) find_program(JLINK_EXE "JLinkExe" PATHS "/Applications/SEGGER/JLink" REQUIRED) find_program(JLINK_GDBSERVER "JLinkGDBServer" PATHS "/Applications/SEGGER/JLink" REQUIRED) # 自定义烧录目标 add_custom_target(flash DEPENDS ${PROJECT_NAME} # 确保先编译主目标 COMMAND ${JLINK_EXE} -device STM32F407VG -if SWD -speed 4000 -autoconnect 1 -CommandFile ${CMAKE_CURRENT_SOURCE_DIR}/jlink_flash.jlink COMMENT "Flashing with J-Link..." ) # 可选:GDB调试目标 add_custom_target(debug COMMAND ${JLINK_GDBSERVER} -device STM32F407VG -if SWD -speed 4000 -port 2331 COMMENT "Starting J-Link GDB Server..." ) ``` 需要同时创建`jlink_flash.jlink`脚本文件(与CMakeLists.txt同级): ```jlink halt loadfile ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bin 0x08000000 verifybin ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.bin 0x08000000 reset go exit ``` #################### 关键配置说明 #################### 1. **工具链路径**: ```cmake set(CMAKE_C_COMPILER "/usr/local/bin/arm-none-eabi-gcc") # 必须与实际安装路径一致 ``` - 可通过`which arm-none-eabi-gcc`查找真实路径 2. **烧录依赖关系**: $$ \text{构建流程:} \quad \text{flash} \xrightarrow{depend} \text{MyFirmware} \xrightarrow{compile} \text{.bin/.hex} $$ - `DEPENDS ${PROJECT_NAME}`确保烧录前已完成编译 3. **J-Link参数调整**: ```cmake -device STM32F407VG # 改为实际芯片型号(如GD32F450、NRF52832等) -if SWD # 接口类型(SWD/JTAG) -speed 4000 # 时钟速度(KHz) ``` #################### 常见问题处理 #################### 1. **找不到J-Link可执行文件**: ```bash # 检查JLinkExe是否在默认路径 ls /Applications/SEGGER/JLink/JLinkExe # 如果安装在其他位置,需修改find_program路径 ``` 2. **权限问题**: ```bash # 将用户加入dialout组(Mac可能需要创建该组) sudo dseditgroup -o edit -a $(whoami) -t user dialout ``` 3. **烧录地址不匹配**: ```jlink loadfile ... 0x08000000 # STM32的Flash起始地址,其他芯片需调整 ``` 4. **CLion集成使用**: - 在CLion的`Build Targets`中添加`flash`目标 - 点击右上角 ▶️ 直接触发烧录 完整项目结构示例: ``` MyProject/ ├── CMakeLists.txt ├── jlink_flash.jlink # J-Link脚本 └── src/ ├── main.c └── system_stm32f4xx.c ``` 建议通过`cmake --build build --target flash`测试构建流程,确保各环节工作正常。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值