调试期间,Qt Creator中的外设寄存器

时间:2016-08-05 12:29:04

标签: c++ qt debugging cpu-registers stm32

我使用Qt Creator为STM32使用Bare Metal配置开发嵌入式应用程序。当我在不同的IDE(如KIEL uVision,IAR System Workbench或某些Eclipse IDE)下调试此应用程序时,我有特殊视图可用,我可以在树列表中看到处理器特定的寄存器。 Qt Creator有类似的东西吗?

我在调试视图中看到了寄存器视图。是否有可能告诉它显示哪个内存地址?

编辑:我写的应用程序是用C和C ++编写的。目标是基于ARM架构的微控制器,在本例中为STM32。没有Qt或QML代码。

我的目标是使用QtCreator作为IDE来开发此应用程序。这很简单,因为您只需在套件配置中配置编译器(arm-none-eabi-gcc),调试器(arm-none-eabi-gdb)和gdb-server(openocd)。这允许我为裸机目标创建可执行的elf文件,然后将其闪存到微控制器内的FLASH存储器中。

所有这些步骤都已完成。

然而,调试部分变得棘手,因为内存空间的一部分是直接硬件配置而不是纯内存。该存储空间包含外围设备的配置,允许您例如通过UART,I2C,ETHERNET,USB进行通信,或者仅配置引脚或时钟速度。

您需要查看这些值并将其与参考手册进行比较,并查看每个位的作用。目前可以查看内存映射并在那里阅读,但Keil uVision,IAR System Workbench和基于Ecplipse的IDE具有很好的插件,您可以在其中看到与参考手册中完全相同的值。 (见图片)

所以我的问题是,是否有一些插件或某种方式如何查看和编辑这些或者我是否必须自己编写这个插件?

在后一种情况下,我需要知道如何连接到调试器实例并编写命令和读取输出 - 主要是读取数据@address和写入数据@address。我知道gdb使用MI模式。我尝试从不同的进程连接到gdb,但这是不可能的,所以我想我必须为Qt Creator创建插件。寄存器描述采用文件格式SVD,即具有已定义结构的XML。

总结最后一部分我寻找我必须在插件中实现的代码,它将我连接到正在运行的gdb,并允许我在遇到断点时发送和接收数据。

STM32 Memory map Keil registers Eclipse registers

1 个答案:

答案 0 :(得分:1)

你没有说你是在调试C ++代码还是QML代码,所以我不能回答是或否。如果您在汇编语言级别进行调试(这本身可能会或可能没有用),那么这些寄存器值很有用。

如果您正在调试C ++代码,那么您可以配置您的编译器以生成该代码的汇编列表,但您将在相当低的级别进行调试。

如果你正在调试QML代码,那么你需要一个QML引擎的汇编列表,我怀疑你能得到它。更重要的是,我怀疑尝试使用如此低级别的程序调试器来调试像QML这样的声明性语言是浪费时间。像QML这样的语言的目的是让你超越所有这些。