在Visual Studio上开发ARM嵌入式软件

    一直以来,开发Cortex M系列处理的软件或者ARM9等ARM处理器的裸机软件,一直使用的是Keil MDK环境。Keil MDK可以支持RVCT和GCC两种工具链,对Cortex-M系列处理器提供RTE的包支持,并支持AGDI接口的调试器进行在线调试。在基础功能上,应该说Keil MDK是一个很适合基本嵌入式开发的IDE。但是,随着对Keil使用的深入,也会发现一些非常影响开发效率的问题点。比如说:

  • Keil在工程中加入了很多代码文件时,启动时间明显变得很长;
  • Keil在进入调试态的时候,如果IDE中打开的文件比较多,速度也会很慢;
  • Keil的工程管理中不支持多级Group嵌套,当工程比较大的时候工程视图上的代码不好管理;
  • Keil的代码智能感知做得不好,很多时候还得依靠Source Insight等功能来开发大一点的工程;
  • 会不合宜的重新构建全部工程;
  • 如果不启用Browse Information功能则无法在编辑代码中做导航,如果启用Browse Information则编译速度下降严重;
  • ……

    因为这些问题,笔者有意将使用Visual Studio来代替Keil MDK做嵌入式软件的开发。这一构想已经有很久了,但一直没有实施。现在正好趁着工作变更的机会,利用点空闲时间把这想法逐步实现了。

    笔者是利用Visual Studio的扩展插件功能来实现的嵌入式开发想法,产品名称为Visual Embed。目前,发布1.00版本。该版本的功能如下:

  • 支持创建空白的VC工程,以启动在VC上的ARM软件开发,在该环境中可以使用Visual Studio 的Intelligence Sense智能代码感知及其他VS的功能组件;
  • 支持RVCT工具链(即ARM的官方编译工具链,Keil MDK默认使用的工具链);
  • 支持VC工程和Keil MDK工程的相互转换。

    Visual Embed的安装和使用方法如下:

    (1)首先,需要有一个Visual Studio 2015环境;

    (2)下载Visual Embed安装包,这是一个Visual Studio的扩展包,文件名是VisualEmbedPkg.vsix ;

    (3)关闭Visual Studio,双击VisualEmbedPkg.vsix,选择目标的Visual Studio,并点击“安装”按钮,等待完成安装(如下图);

在Visual Studio上开发ARM嵌入式软件_第1张图片

    (4)启动Visual Studio

    (5)如果要从空白状态创建一个ARM软件工程,可以点击菜单“文件”->“新建”->“项目”,然后在Visual C++下就能找到Visual Embed的模板,如下图:

在Visual Studio上开发ARM嵌入式软件_第2张图片

    (6)要修改嵌入式软件工程的编译配置,可以选择项目的“属性”菜单,将会弹出配置对话框(如下图)。该配置对话框的风格是Visual C++的工程属性风格,但其内容完全支持Keil MDK的项目属性配置项,并作了一些扩展,如支持警告屏蔽参数的设置等。

    (7)编译方法和普通的Visual C++工程一样,选择项目的生成功能即可,运行结果的警告和错误可以提取到VS的错误列表视图上,可以点击列表项定位到代码的问题点(效果如下图),普通的生成时增量生成方式进行的,不会重新构建所有的代码;开发人员也可以根据自己的需求选择“重新生成”来重构建所有代码,也可以选择独立的一个或几个文件执行构建方法;

在Visual Studio上开发ARM嵌入式软件_第3张图片

    (8)如果要导入一个Keil MDK的工程以继续之前的开发工作,可以在VS上的菜单“Visual Embed”->“工程转换”->“Keil MDK-->Visual C++”进行工程转换,如果要将一个用Visual C++开发的嵌入式工程转换回Keil MDK,也可以选用菜单上的“Visual Embed”->“工程转换”->“Visual C++ --> Keil MDK”功能。工程转换的工作对话框效果如下图:

在Visual Studio上开发ARM嵌入式软件_第4张图片


    Visual Embed 1.00的基本功能使用就如上面所述的。因为Visual Studio和Keil MDK对项目工程管理的差异,Visual Embed的一个功能是存在限制的,这些限制有:

  • Visual Studio支持的工程内部文件项的类型更多,因此当Visual C++的工程转换成Keil MDK工程时,有些Keil MDK不支持的文件将会被转为纯文本文件的类型加入目标的Keil工程中;
  • 由于Keil MDK中,RTE组件的工程管理和其他代码文件的工程管理是不同的,而在Visual Studio中,所有工程内文件的管理方式是一样的,所以RTE组件转化到VC中奖被作为普通的代码文件来对待,同样的,RTE组件转化为VC工程中的文件后,逆转回Keil MDK工程后将无法恢复会RTE组件的样式;
  • 由于Keil MDK的工程只存在以Target为区别的配置组,而Visual C++工程存在以Configuration和Platform组合区别的配置组,因此,在Keil MDK工程转化到Visual C++工程中时,将把原Keil工程中的Target转化成VC中的Platform,而把目标VC工程的Configuration设置成Debug。此时,目标VC工程打开时,VS可能会提示类似“warning  : 无法找到项目文件xxx中引用的平台[xxx, 0]”的警告,可以忽略该警告,不影响后续的开发工作。

    Visual Embed 1.00并未实现笔者的所有构想。笔者计划在后续为Visual Embed提供以下功能:

  • 提供对GCC工具链的支持;
  • 提供对JTAG的支持(目前计划会支持AGDI接口的调试器,以及GDB调试器);
  • 提供在开发过程中对Keil MDK 的Pack的支持;

    Visual Embed 1.00的下载地址为:http://download.csdn.net/detail/season_lzw/9398182 。欢迎大家下载使用,并向笔者提报使用过程中的任何问题和建议。

    如果大家想知道Visual Embed的代码,那么Visual Embed是用C#开发的,也没有做混淆,大家直接用.NET的反编译工具解码查看就好。



你可能感兴趣的:(Visual,Embed)