使用VisualGDB将Keil项目导入VisualStudio
前言
本教程展示了如何使用新的Keil项目导入器将Keil ARM项目自动转换为使用MSBuild和GCC构建的VisualGDB项目。在开始之前,安装VisualGDB 5.3或更高版本。
我们将展示如何为STM32F746-Discovery board(附带STM32CubeMX SDK)转换STM32演示项目。虽然大多数转换是自动执行的,但是项目需要进行一些小的调整才能正常工作。我们将概述这些调整,并解释为什么需要这些调整。
步骤
1、 下载并解压STM32Cube SDK用于STM32F7,并找到Keil的演示项目文件(通常在STM32Cube_FW_F7_Vx.y.zProjectsSTM32746G-DiscoveryDemonstrationMDK-ARM)
2、 启动Visual Studio并打开 VisualGDB Embedded Project Wizard
3、选择“自动导入不同格式的项目->导入现有Keil项目”。然后指定位于前面的.uvprojx文件
4、点击“下一步”,VisualGDB会自动从项目中检测设备类型并选择相应的设备,点击“下一步”继续:
5、连接你的板到USB端口。VisualGDB会自动检测ST-Link类型并显示在Debug方法页面:
6、按“Finish”生成项目。VisualGDB将自动导入源文件,包括Keil项目中的目录和预处理器宏。但是STM32F746NG-Discovery演示项目文件缺少一个include目录,因此初始构建将失败。然而VisualGDB将自动发现丢失的目录,并让您只需按“添加现在”即可将其添加到设置中:
7、另一个错误是lwIP库重新定义了gcc已经定义的时间值结构:
8、这是很容易修复通过设置LWIP_TIMEVAL_PRIVATE通过VisualGDB项目属性-> MSBuild设置:
9、另一个构建错误将由默认的软件浮点模式和项目中包含的FreeRTOS端口之间的不兼容引起:
error : selected processor does not support `vstmdbeq r0!,{s16-s31}' in Thumb mode
error : instruction not allowed in IT block -- `stmdb r0!,{r4-r11,r14}'
error : selected processor does not support `vldmiaeq r0!,{s16-s31}' in Thumb mode
error : instruction not allowed in IT block -- `msr psp,r0'
10、要解决这个问题,可以通过VisualGDB项目属性将“浮点支持”设置为“硬件”:
11、最后链接原项目会导致“FLASH溢出”错误:
这是因为项目包含了一个特殊的数据部分,该部分需要放入QSPI内存中,而Keil导入器不能自动转换它。
12、解决这个问题的一种方法是使用VisualGDB项目属性的附加内存页面,让VisualGDB自动编辑链接器脚本,但是由于ST演示项目已经包含了正确格式的GCC链接器脚本,我们可以简单地将VisualGDB指向它的位置(通常情况下 ProjectsSTM32746G-DiscoveryDemonstrationSW4STM32STM32F7-DISCOSTM32F746NGHx_FLASH.ld):
13、最后,我们需要配置VisualGDB来自动编程QSPI内存内容。这是通过使用本教程中描述的VisualGDB FLASH编程插件实现的。将加载FLASH插件教程中描述的命令加载到OpenOCD命令行中,并按“OK”保存设置:
14、现在你只需点击F5, VisualGDB就会自动将项目加载到面板中:
15、加载完成后,您应该在设备屏幕上看到STM32程序:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于linux权限s权限和t权限详解
- centOS7 桥接模式设置静态Ip的方法步骤
- linux环境下卸载oracle 11g的过程
- Seurat包基本分析实战—文献图表复现
- ubuntu配置tftp服务的步骤小结
- CentOS7下GitLab跨大版本升级的方法
- 解决Linux system v 共享内存问题
- Linux下core文件的使用方法详解
- 使用Kubeadm在CentOS7.2上部署Kubernetes集群的方法
- linux systemctl命令详解
- CentOS7使用dnf安装mysql的方法
- Linux中crontab定时任务不执行的原因
- Linux系统为什么要吃掉我的“内存”
- 教你如何修改Linux远程登录欢迎提示信息
- 详解linux 定时任务 crontabs 安装及使用方法