https://gnu-mcu-eclipse.github.io/ 获取最新版本
通过Eclipse Marketplace查找并安装
打开eclipse,菜单中选择"Help → Eclipse Marketplace..."
"Find" 中输入 "gnu mcu eclipse" 或 "gnu arm eclipse",查找和安装
图 2‑1 Eclipse Marketplace
SDK安装包 Tools\Debug\ilg.gnuarmeclipse.repository-3.2.1-201701141320.zip
打开eclipse,菜单中选择"Help → Install New Software..."
单击"Add...",弹出窗口"Add Repository"
单击"Archive...", 弹出目录,选择插件位置,点击"Add"
图 2‑2 选择插件集文件位置
选择所有可选插件
图 2‑3 选择所有GNU ARM Eclipse插件
单击"Next >",列出所有即将安装的插件集
图 2‑4 选择安装的GNU ARM Eclipse插件
单击"Next >",同意license
图 2‑5 同意安装软件协议
单击"Finish",开始安装。安装结束后会弹出窗口,提示重启Eclipse。
图 2‑6 安装软件后重启
重启Eclipse。进菜单选择 "Help → Install New Software...",在弹出窗口中单击 "already installed"查看插件集是否完整正确安装。
图 2‑7 安装新软件
图 2‑8 查看已安装软件
单击菜单" Run → Debug Configuration...",在弹出窗口左侧选择"GDB SEGGER J-Link Debugging",双击打开一个新的配置页。
图 2‑9 新建Debug配置页
Debug配置页右侧
"C/C++ Application" 下 "Browse..." 选择所需要调试SDK目录下的文件"proj\build\316d_32_128_msw\out\316d_32_128_msw.axf"
选择 "Disable auto build"
其他页面配置请参照以下各图
图 2‑10 Debugger配置页1
图 2‑11 Debugger配置页2
图 2‑12 Startup配置页1
图 2‑13 Startup配置页2
单击 "Apply","Close" 退出当前设置,选择菜单 "Window → Preferences",弹出窗口左侧选择 "Run / Debug → Launching",更新配置如图
图 2‑14 窗口配置页
窗口左侧选择 "Run/Debug → String Substitution",更新配置如图
图 2‑15 字符串配置页
窗口左侧选择 "C/C++ → Debug → GDB",更新配置如图
图 2‑16 GDB配置页
确保JTAG Debugger工具和USB转UART数据线已正确连接电脑和CarDV。
打开tera term,配置正确的端口,并激活为当前应用窗口。
按电脑任意键,通电开机,系统会停留在Boot部分。
图 2‑17 系统启动
打开Eclipse,单击菜单 "Run→ Debug Configuration...",选择刚新建的配置,在弹出窗口右侧选择 "Debug",开始Loading。
图 2‑18 JTAG Downloading
停在设置的断点
图 2‑19 停在设置断点
Eclipse Debug主要tab介绍
"Variables" tab会列出当前函数所有变量,可实时查看各变量的值
图 2‑20 查看当前函数变量
"Expressions" tab会列出通过"Watch"添加的变量
"Memory" tab左侧可以添加查看的地址,右侧会显示对应的值
在"Variable","Expressions"等tab某个变量上右键,弹出快捷菜单,选择"View Memory",可以直接查看该变量的内存地址和对应的值
图 2‑21 查看变量内存
图 2‑22 变量内存
我们可以保存当前查看的一段内存,比如100个字(WORD)
图 2‑23 保存一段内存
注意,在读写中0x20000000~0x28000000 属于CACHE,0x90000000~0x98000000 属于NON CACHE。
"Breakpoints" tab会列出所有断点。
当判断条件为真时,Eclipse会停在断点位置。在tab最右边,单击"View Menu",弹出菜单,可新增各类型断点。
图 2‑24 断点设置
比如单击 "Add Function Breakpoint(C/C++)...",在弹出窗口 "Function name" 中填 "VideoFunc_Record"
图 2‑25 新增函数断点
然后单击 "Apply and Close",在"Breakpoints" tab会看到新增项
图 2‑26 查看已设置断点
当CarDV开始录像时,程序会停在VideoFunc_Record()
图 2‑27 断点位置
当串口信息需要立即打印出来的时候,请在对应位置前添加以下两行:
Send_msg_buffer_mode_en(0);
Send_msg_buffer_mode_flush();
Isw_cli_main.c
Wlan_cli.c
Dump (dumpdip / dumpraw / dump_adas ...)
Memory (memdump / memusage ...)
Register (regset / regget / reggetbank ...)
Net (net / wifi ...)
Sensor (checkfps ...)
IO (io gpio / gpiodrv ...)
Printc
UartSendTrace
RTNA_DBG_Str
在config_fw.h中确认以下宏有设置为1,否则需要更新LIB。
DEBUG_UART_TO_FILE
DEBUG_UART_TO_SD
系统中止一般分为以下几种情况:
#define EXCEPTION_DATA_ABORT 0x00000001 #define EXCEPTION_PREFETCH_ABORT 0x00000002 #define EXCEPTION_UNDEF_ABORT 0x00000003
当系统中止发生时,LOG会打印一系列信息帮助我们追踪异常。下图为截取的一段系统异常日志:
图 3‑1 系统中止异常信息
日志前两行打印的是中止类型,"type: 0x00000001!" 意味着系统中止是"数据中止(Data Abort)"
中间打印的是寄存器部分
"abort_adress: 0x202ec844"指出了中止地址,通过查询proj\build\316d_32_128_msw\out\316d_32_128_msw.map,一般可以定位问题发生在某个具体的函数内部。
图 3‑2 系统中止异常信息2
(注:MAP文件需要和测试固件是同一次编译完成,图3-2仅做示例,和图3-1并不匹配)
"CurrentTask: 0x0000001f" 指出了系统异常中止时当前运行的TASK ID。
日志最后完整打印了系统各TASK信息。可以通过task id定位到异常中止时运行的Task。