Visual Studio中的ARM GCC交叉编译


[原文发表地址] ARM GCC Cross Compilation in Visual Studio

[原文发表时间] 2017/10/23

我们的交叉编译支持使用我们的“Open Folder”功能,因此没有涉及项目系统。我们正在使用来自其他Open Folder场景的相同的JOSN配置文件,并添加了其他选项来支持这里介绍的工具链。我们希望这为许多风格的嵌入式开发提供了灵活性。开始使用此功能并了解功能的最佳方法是使用ARM mbed在线编译器导出的项目。我们将在这里介绍基础知识,了解有关在线编译器的更多信息,请参阅ARM的教程您可以在这里注册一个账号

ARM的在线编译器可以让您选择目标平台并相应地配置您的项目。我们正在使用ST Nucleo-F411RE,但编译器支持的任何一个板都应该是正常的。单击新建,然后在打开的对话框中选择一个模板以开始使用。我选择了“Blinky LED test for ST Nucleo boards”

ARM new project dialog

然后在程序工作区中选择程序,右键单击并选择导出程序。

在导出程序对话框中,为导出目标选择GCC(ARM Embedded)

这将下载Zip文件到您的计算机。将该文件的内容提取到您喜欢的位置并打开Visual Studio。现在用File-->Open-->Folder打开它。我们需要通知VS这是什么类型的的C++代码,所以进入项目菜单并选择Edit Settings-->CppProperties.json。修改内容,所以只有一个条目与以下匹配。

{
  "configurations": [
    {
      "inheritEnvironments": [
        "gcc_arm"
      ],
      "name": "gccarm",
      "includePath": [
        "${env.INCLUDE}"
      ],
      "defines": [

      ]
    }
  ]
}

gcc_arm的环境定义设置了VS安装的ARM GCC工具链的路径。它还触发扫描名为mbed的子菜单,以正确设置用于智能感应的包含路径。当您打开main.cpp时您会看到这个。您期望工作的一切将自动完成,定义,窥视定义等。您可以指定其他包含目录,但请注意,当前存在的子目录也必须在此时显示声明。

Open Folder还支持makefile的语法高亮显示,所以请打开它来查看。要编译项目,请右键单击Makefile并选择构建。

您将在输出窗口看见构建输出。

您现在将在解决方案资源管理器中看到一个新的BUILD输出文件夹。这是您的输出二进制文件,它是您的程序名称.bin您可以在您的主板上闪光。

关于mbed板的伟大之处之一是使用该二进制文件轻松实现。当连接到PC时,它们显示为USB大容量存储设备,因此您只需将bin文件拖放到驱动器,则主板将重置并运行程序。如果要从Visual Studio中控制,可以使用任务。选择二进制,右键单击并选择配置任务。这将创建一个名为tasks.vs.json的文件,您可以在其中配置将在其配置的文件的上下文菜单中显示的任务。下面显示的示例任务会将指定的二进制文件复制到D盘中,您可以修改这个以匹配您的系统。命令$ {env.COMSPEC} 提供了传递参数的命令提示符环境。

{
  "version": "0.2.1",
  "tasks": [
    {
      "taskName": "flash",
      "appliesTo": "BUILD/Nucleo_blink_led.bin",
      "type": "launch",
      "command": "${env.COMSPEC}",
      "args": [
        "copy BUILD\\Nucleo_blink_led.bin D:"
      ]
    }
  ]
}

下一步是什么

下载Visual Studio 2017 Preview,安装Linux C ++ Workload,选择嵌入式和IoT开发选项,并用您的项目尝试一下。

我们有原型调试支持,并希望在将来的版本中补充。它使用与其他Open Folder方案相同的launch.vs.json格式,因此如果您知道需要为您的电路板和gdbserver指定什么,可以在此版本中使用。

我们正在积极地为嵌入式场景提供额外的支持。您的反馈对我们来说非常重要。我们期待着您的回音,并看到您所做的事情。

找到我们的最佳方式是通过我们的GitHub托管的问题列表,直接通过邮件vcpplinux-support@microsoft.com 或在Twitter上找到我@robotdad


Comments (0)

Skip to main content