嵌入式程序进入板级调试以后,问题就不只在代码里了。开发电脑、MULTI、调试探针、目标板和处理器之间只要有一处配置没对应好,程序可能已经编译通过,却停在下载或连接阶段。Green Hills的调试方式还会随目标处理器和连接设备变化,有的工程走JTAG,有的使用SWD或其他接口。碰到连接失败时,把软件配置和硬件链路分开检查,往往比反复重新连接更容易找出原因。
一、Green Hills怎么设置调试环境
MULTI调试环境需要知道程序要连接哪块目标、采用什么连接方式以及使用哪份可执行文件。工程第一次接入开发板时,这几项最好逐一确认,后面再保存成固定配置。
1、建立目标连接配置
先把开发电脑到目标板之间的连接关系建好,后续Debugger才能按对应方式访问处理器。
①、打开【Green Hills MULTI】并载入当前【工程项目】。
②、进入工程使用的【Target Connection】配置。
③、选择当前开发板对应的【Target Processor】。
④、按照硬件环境选择【Green Hills Probe】或工程使用的其他连接方式。
⑤、设置当前接口使用的【JTAG】、【SWD】或对应调试类型。
⑥、保存本次【Target Connection】配置。
2、配置调试探针连接
①、接通【目标板】和【Green Hills Probe】电源。
②、使用对应调试线连接【Probe】与目标板调试接口。
③、确认开发电脑能够访问【Probe】。
④、在【Target Connection】中填写当前探针连接信息。
⑤、选择与开发板匹配的【Processor】配置。
⑥、保存设置并执行连接测试。
3、载入准备调试的程序
①、在【Project Manager】中选择已经完成构建的【Program】。
②、启动【MULTI Debugger】。
③、确认当前使用的【Target Connection】。
④、载入带有调试信息的【可执行文件】。
⑤、执行程序下载。
⑥、在源码区域设置【Breakpoint】并开始调试。
如果程序可以完成下载,断点也能对应到源码位置,基本说明工程、调试符号和目标连接已经建立起来。后续再观察寄存器、内存或变量时,就不用重新配置整套环境。
二、Green Hills调试连接失败如何解决
调试连接失败的表现差别很大,有时Debugger直接找不到目标,有时能识别探针却无法访问处理器,还有一种情况是连接成功后卡在程序下载。先确定失败发生在哪一段,排查范围会小很多。
1、MULTI找不到调试探针
开发电脑连探针都没有识别时,暂时不用检查程序代码,先把主机到探针这一段链路确认清楚。
①、检查【Green Hills Probe】是否正常上电。
②、查看【Probe】当前状态信息。
③、确认【USB】或【Ethernet】连接没有松动。
④、使用网络连接时核对【IP Address】和电脑所在网络。
⑤、返回【Target Connection】重新填写探针地址。
⑥、再次执行【Connect】。
2、能找到Probe但无法连接处理器
①、关闭当前【Debugger】连接。
②、检查目标板是否正常供电。
③、核对【JTAG】或【SWD】线缆方向。
④、确认使用的【Target Processor】与实际芯片一致。
⑤、检查调试接口是否被其他工具占用。
⑥、重新启动【Target Connection】并连接目标。
3、连接以后一直停在初始化阶段
①、打开当前【Target Connection】设置。
②、核对处理器和开发板相关配置。
③、检查当前使用的【Reset】方式。
④、确认目标板启动状态符合调试要求。
⑤、重新执行目标复位。
⑥、再次启动【MULTI Debugger】。
有些板卡在上电以后已经跑进自己的启动流程,这时探针虽然能够识别硬件,却未必能按照现有配置取得处理器控制权。复位方式和目标初始化条件要结合开发板本身来判断。
4、程序下载时报错
程序已经能够连接,但下载阶段失败时,检查重点要转到可执行文件和目标存储区域。
①、确认【Program】已经重新构建。
②、查看Debugger载入的【可执行文件】路径。
③、核对程序使用的【Memory Map】。
④、检查下载地址是否落在目标板可访问区域。
⑤、重新载入当前【Program】。
⑥、再次执行【Download】。
5、断点无法停住或源码位置错乱
①、确认当前工程使用【Debug】构建配置。
②、检查可执行文件是否包含【Debug Information】。
③、执行当前工程的【Clean】。
④、重新执行【Build】。
⑤、重新载入生成的【Program】。
⑥、删除原有【Breakpoint】后重新设置。
⑦、运行程序检查断点位置。
三、Green Hills调试连接恢复后怎么确认环境
连接重新恢复以后,可以再做一次简单验证,确认当前配置确实能够重复使用。否则下一次打开工程时又出现相同问题,还得重新找一遍原因。
1、检查基本调试操作是否正常
可以从几个基础动作开始验证,不必马上进入复杂程序逻辑。
①、在【MULTI Debugger】中执行【Reset】。
②、重新执行【Download】。
③、在入口函数附近添加【Breakpoint】。
④、点击【Run】运行程序。
⑤、执行【Step】检查单步操作。
⑥、打开【Register】和【Memory】窗口查看目标状态。
2、保存已经验证的连接设置
①、保存当前【Target Connection】配置。
②、记录使用的【Target Processor】和连接接口。
③、保留当前【Probe】连接信息。
④、保存能够正常调试的【工程配置】。
⑤、整理本次修改过的调试参数。
同一块板后面继续开发时,这份已经跑通的配置可以直接拿来对照。碰到新工程连不上,也能快速判断到底是硬件链路变了,还是工程自己的调试设置发生了变化。
总结
Green Hills调试环境牵涉的软件和硬件环节比较多,连接失败时只盯着Debugger里的报错,很容易把排查方向带偏。更实用的做法是先确认电脑能不能找到探针,再看探针能不能控制目标处理器,最后检查程序下载和调试信息。把已经跑通的连接配置保存好,以后换程序、迁移工程或者重新接板时,都有一份可以直接比较的参照。希望这些经验能给大家排查Green Hills调试连接问题时提供一些思路。
