1. 前言
Zephyr是一种微型物联网实时操作系统,为所有资源受限设备,构建了针对低功耗、小型内存微处理器设备而进行优化的物联网嵌入式小型、可扩展的实时操作系统(RTOS),因此它也是我司想要关注利用的一款RTOS。Zephyr官方不仅提供了详细的开发指导,也提供了zephyr调试手段,下面具体介绍zephyr调试流程。
2. 调试环境准备
环境:测试使用的ubuntu虚拟机,在上面根据官网Getting Started Guide章节指导搭建zephyr工程
工具:j-link(记得安装j-link驱动)
实验单板:stm32H743(这个不关键)
3. 调试流程
1)虚拟机串口连接j-link(如果不是虚拟机则跳过此步)
点击选择连接串口
连接时候在串口图标上停顿确认下是不是j-link串口
2)编译程序
命令:west build -p auto -b <your-board-name> <file-root>
例如:我当前在CMakeLists.txt的同级目录下,自定义单板名为nucleo_h743zephyr,就可以使用命令:west build -b nucleo_h743zephyr -p
编译生成的zephyr镜像文件zephyr.hex当前工程目录的build/zephyr/下
3)烧录代码
直接在当前目录敲west flash命令
4)调试工程
在当前目录执行命令:west debug
看到红框语句就说明GDB调试环境准备成功,之后回车按C即可调试
进入GDB界面后即可完成自己想要的调试动作,例如打断点、看调用栈,下面简单介绍下GDB的常用使用命令
4. GDB常用命令
(本章节只做总结使用,调试命令均使用简写,完整扩展名不做体现,命令也只体现几个常用场景,多更请咨询www.baidu.com)
1)打断点: b 断点处(可以是函数也可以文件)
例如:b stm32h7_init (断住函数stm32h7_init)
b soc_m7.c:123 (断在soc_m7.c的123行)
b soc_m7.c:123 if g_a == 5 (当执行到soc_m7.c的123行且当前全局变量g_a为5时断住)
2)继续运行:c
3)执行下一行命令:n
4)执行下一条命令:s
5)断点断住后显示当前代码页面:layout src
刷新代码页面:ctrl + L
6)结束退出:q
7)显示当前调用栈:bt
8)在界面上打印变量值或者地址上的内容: p var/addr