2024-07-02
GR5526 GUI专题(4) - Lvgl字体的位图数组合并转换为bin文件的说明
写技术文章
精选推荐
Seiyou
本文将简单介绍如何借助Cortex-Debug插件在VSCode中对GR5xx上的程序进行调试。
本文基于VSCode 1.85.0版本编写,请保证安装的VSCode尽可能的新来避免兼容性问题
Cortex-Debug插件依赖J-Link驱动与gcc-arm-none-eabi
工具链,请确保已经正确安装了上述内容。安装教程请参考GR5526 GCC用户手册或GR551x GCC用户手册。
在确保上述依赖正确安装之后,进行Cortex-Debug插件的安装:
在VSCode中,按下Ctrl+P
,输入下面的内容并回车来安装插件:
ext install marus25.cortex-debug
安装完成后,在左边会自动弹出插件管理,显示已经安装的Cortex-Debug插件:
至此,环境准备就全部完成了。
launch.json
配置文件使用VSCode打开项目文件夹,在左边工具栏点击“调试”,进入调试配置界面:
点击创建 launch.json文件的蓝色字样,在弹出的选择调试器下拉框中选择Cortex-Debug:
此时Cortex-Debug会自动在.vscode
文件夹中创建launch.json
文件,并写入模板配置:
接下来修改配置中的内容,下面是模板中几个字段的介绍和修改方法:
除了上述模板内容,使用JLink作为调试器进行调试还有1个参数需要设置:
device
:调试设备的类型,对于GR5xx设备设置为"cortex-m4"即可。下面将展示基于示例工程projects/ble/ble_peripheral/ble_app_template_freertos
,使用Makefile+GCC进行编译构建得到可执行文件的launch.json
内容:
{
"version": "0.2.0",
"configurations": [
{
"name": "ble_app_template_freertos",
"cwd": "${workspaceFolder}",
"executable": "projects/ble/ble_peripheral/ble_app_template_freertos/GCC/out/lst/ble_app_template_freertos.elf",
"request": "launch",
"type": "cortex-debug",
"runToEntryPoint": "main",
"servertype": "jlink",
"device": "cortex-m4",
}
]
}
在按要求配置好launch.json
之后,就可以开始调试了。在VSCode左边工具栏找到调试按钮,点击进入运行与调试面板,确保在下拉框中选中刚刚创建的调试目标,点击绿色三角箭头开始调试。或者直接按下快捷键F5:
此时插件会自动运行JLinkGDBServer
与arm-none-eabi-gdb
并设置相关参数,等待一小段时间,当程序运行到main()
函数时,由于之前配置的入口断点,调试器会自动停在main()
函数的第一行:
至此,VSCode调试GR5xx程序的整个流程已经完全跑通了,下面将针对一些VSCode调试与Cortex-Debug的常用功能做简单介绍。
在开始调试后,运行和调试窗口会显示下面的内容:
最上方的是变量窗口,用于显示调试过程中的变量,在窗口中又区分了本地变量(Local),全局变量(Global),静态变量(Static)和寄存器(Register)。点击其中一项可以展开查看具体内容,例如查看寄存器的值:
点击右上角的0x图标,可以将值的显示切换到16进制,更加符合调试习惯:
在变量窗口下面的是监视窗口。在监视窗口中我们可以编写表达式,在暂停时将直接显示表达式的值,这对于调试结构体来讲是非常有用的。例如这里填入中g_calendar_time.sec
,运行一段时间,点击暂停,就可以看到对应的值产生了变化:
在监视窗口下面的是调用堆栈窗口。暂停时,该窗口将显示当前运行点的整个调用栈,例如当程序运行到wfe_func()
中暂停时,如图所示:
单击每一项都可以直接跳转到源码的对应位置。
最后是断点窗口。所有的断点都会显式在此处,可以在该窗口添加断点,可以在编辑窗口中添加:
在VSCode中也可以使用单步调试。在进入调试模式后,编辑窗口中间上边沿会显示调试按钮工具条:
从左到右依次是:
这些操作也可以使用快捷键完成:
F5
继续F6
暂停F10
逐过程F11
单步Shift+F11
单步跳出VSCode的调试是基于GDB进行的,所以自然也支持直接通过GDB命令进行调试。按下Ctrl+Shift+P
打开命令输入框,输入调试控制台
或Debug Console
,找到
查看:切换调试控制台选项,或直接使用快捷键Ctrl+Shift+Y,打开调试控制台:
在这里就可以直接使用GDB命令进行调试了,例如我想从0x00800000
读取一个4字节:
在VSCode中调试同样支持数据断点调试。在任意位置暂停后,在变量窗口中找到要监测的变量,右键:
其中“值读取时中断”,“值更改时中断”,“值访问时中断”就是数据断点。点击添加后在断点窗口中就能看到添加的数据断点,并且在该变量的值被修改(或读取,访问)时就会停下。
从图中可以看到,当g_calendar_time
的值被读取时,运行停止了。此时在VSCode在调用堆栈窗口可以看到是由Data Breakpoint引起的暂停,且暂停的位置就是g_calendar_time
值的位置。
得益于JLink GDB Server提供的Thread Aware Debugging能力,VSCode + Cortex-Debug可以直接在调试器中显示RTOS相关的信息。这里以FreeRTOS为例进行介绍,其他RTOS的支持情况请自行查阅SEGGER官网。
在launch.json
中添加如下配置:
让Cortex-Debug调试时加载JLink的FreeRTOS插件。此时再调试使用了FreeRTOS的项目,当程序运行到FreeRTOS调度器启动之后暂停,此时在左侧的调用堆栈窗口就会额外显示当前所有Task的状态:
显示内容包括所有Task的优先级,状态,以及在Task切换之前的调用栈,对于使用FreeRTOS的项目来讲是非常有用的一个功能。
VSCode的调试功能非常强大,文中介绍的仅仅是冰山一角,其他的实用功能可以通过阅读VSCode官方的Debugger指南,或者查阅网上的其他资料。
打开微信,使用“扫一扫”即可关注