2016-08-05 48 views
2

我使用Qt Creator为STM32开发使用Bare Metal配置的嵌入式应用程序。当我在KIEL uVision,IAR System Workbench或一些Eclipse IDE等不同的IDE下调试此应用程序时,我可以看到特殊的视图,可以在树列表中看到处理器特定的寄存器。 Qt Creator有类似的东西吗?调试期间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有很好的插件,您可以在参考手册中看到完全相同的值。 (看图片)

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

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

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

STM32 Memory map Keil registers Eclipse registers

+0

这似乎是使用错误的工具来完成这项工作。如果你不使用Qt或QML,你为什么选择使用QtCreator?你已经列出了许多具有你想要的功能的环境,那么你为什么选择不使用这些功能呢? – rjp

+0

我在Win,Mac和Linux程序以及Android上使用Qt和QML。在我看来,它有能力。唯一缺少的是这个特殊的观点。其他环境具有此功能,但它们像IDE一样糟糕。 IAR和Keil使用他们自己的构建系统和编译器,这些不适合我,因为我需要在构建期间添加自定义内容,因此我使用CMake。也没有便携式。怀疑葡萄酒会有帮助。 – phodina

+0

Eclipse和GNU ARM工具有什么关系?看起来你正在试图把一个方形钉子钉入一个圆形洞中,因为你喜欢方形钉子比圆形钉子更好。你可能能够使用强力工作,但有更好的解决方案。 – rjp

回答

1

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

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

如果你正在调试QML代码,那么你需要一个QML引擎的汇编列表,我怀疑你将能够得到。更重要的是,我怀疑用这样一个低级过程调试器来试图调试像QML这样的声明式语言会浪费时间。像QML这样一种语言的重点在于让您了解所有这些。

+0

在嵌入式系统上调试C代码时,我必须定期查看寄存器值。它不只是在汇编中它们相关的地方,特别是外围配置寄存器。如果你正在调试QML,我同意,但你已经远远超过了这一点。 – rjp

+1

你说得对,尤其是外设寄存器的值与你使用的语言无关,甚至是QML(尽管我怀疑你的QML代码会修改外设寄存器)。我正在考虑CPU寄存器,如果没有看到底层汇编代码,这很难解释。 – Mark