在开始之前确保您可以使用uVision IDE构建keil5编程项目
选择“导入项目”和“生成Makefile”选项:
在下一页选择ARM工具链,然后选择“手动指定标志”现在标志为空:
指定包含keil5编程项目的目录。如果您没有太多的文件您可以选择“显示所有源文件在一起”,以平展keil5编程目录结构:
选择一个调试方法在本例中,我们将使用STM32F411RE核子板中集成了ST-Link的OpenOCD:
不要忘记手动选择设备类型当您手动指定标志时,VisualGDB将无法检测它
默认情况下,VisualGDB不会导入程序集启动文件(.s)因此将其复制箌新的项目目录中,并通过上下文菜单将其添加到项目中:
现在我们需要从uVision项目导入编译器和链接器标志打开uVision中的目标属性,复制编译器控制字符串:
指定的选项需要分为3类:
下表对示例uVision项目的选项进行了分类:
首先,我们将向项目属性添加与智能感知相关的选项在第一页打开VisualGDB项目属性,并指定从uVision标志中提取的目录的定义和包含目录:
注意您可以指定与项目目录相关的路径(例如,RTE表示\RTE)
稍后我们将指定特定于keil5编程的标志。如果您在这里输入它们它将会混淆基于clang的智能感知引擎。
按下OKVisualGDB将重新检查标志并更新智能感知。打开源文件确保没有智能感知错误,语法着色工作正常:
现在我们将更改Makefile,以使用keil5编程编译器而不是GCC并提供特定于keil5编程的标誌。打开mcu.mak文件:
mcu.mak文件指定了编译器工具(CC, CXX, LD和AR)和智能感知引擎使用的公共标志因为我们不想破坏智能感知,所以我们将在不同的地方指定它们而不是修改这个文件。在此之前打开keil5编程目标选项并注意链接器标志:
现在我们将指定特定于keil5编程的标志。创建一个名为keil5编程的文件mak茬项目目录中,放置剩余的C/ c++标志和链接器标志以及CC、CXX和其他工具的覆盖:
如果你现在构建你的项目,你将会得到几个错误关于丢失的HAL符号:
偠解决这个问题首先通过uVision找到HAL文件夹:
该文件夹中的源文件实现了各种HAL功能:
在解决方案资源管理器中右键单击,选择Add->现有项并向项目添加HAL源文件然后构建你的解决方案。双击VisualGDB使用keil5编程编译器和链接器的构建日志:
现在按F5开始调试程序一旦你验证了LED是闪烁的,在你的程序循環的某处设置一个断点并验证你可以计算变量:
由keil5编程链接器生成的ELF文件有一个基本问题。如果用GDB加载它全局变量的值将是-1,而不是正瑺的初始值:
这是因为GNU和keil5编程链接器之间的差异GNU链接器为数据部分计算两个不同的地址:加载它的地址(VMA)和存储其内容的闪存地址(LMA)。然后GDB将節内容放在LMA地址,启动代码将其复制到VMAkeil5编程链接器设置了LMA = VMA,因此GDB没有将数据部分写入FLASH中而是直接将其放入RAM中,在RAM中会被keil5编程
我们将通過两个步骤来解决这个问题:首先我们将运行名为fromelf的keil5编程工具。exe将ELF文件转换为.bin文件以反映keil5编程工具所期望的FLASH内存内容:
然后,我们将使用objcopy笁具编辑.elf文件用.bin文件的内容替换复制到闪存中的数据。这将确保GDB将初始化数据以keil5编程期望的方式放入FLASH中:
经过修改的Makefile片段如下所示(片段名稱和地址取决于设备应该从原始elf文件转储中取出):
现在构建项目并验证变量是否正确初始化:
如果它们仍然被破坏,通过检查arm-eabi-objdump工具生成的转儲文件再次检查ROM部分是否被放置在正确的地址,其大小是否与bin文件的大小匹配:
因为我们已经手动创建了这个项目VisualGDB不会显示设备的外围寄存器。要解决这个问题请为您的设备创建一个普通的VisualGDB项目,并搜索MCUDefinitionFile元素项目目录中的xml文件,例如:
重新开始调试您的项目并验证硬件寄存器现在显示:
最后,我们将修复keil5编程错误消息的解析由于它们使用的语法与GCC不同,VisualGDB默认不会识别它们您可以通过添加一个简单的函数来重现这个问题,该函数将产生警告和错误并尝试构建您的文件:
为了支持“, line ”格式下载BuildMessageRegexes。xml文件将其保存到您的项目目录(或附菦的任何其他目录),并在.vgdbsettings文件中指定它的相对路径如下所示:
如果您现在构建项目,Visual Studio将正确显示错误和警告:
如果您正在使用VisualGDB和keil5编程编译器请在论坛中告诉我们。一旦我们收集了足够的反馈我们将在下一个VisualGDB版本中简化与keil5编程工具的集成。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。