现在,使用Eclipse为微控制器创建一个新项目相当容易,如果我想用C或C开始这个项目,我可以选择C++:

新项目的 C C++选项

嵌入式微控制器领域仍由C主导,而不是C++。因此,虽然从一个在线项目C++,但大多数供应商提供的示例或教程项目都是 C 项目。那么,如何将此类项目转换为C++?

要C++CDPT项目中获得一些支持,我基本上需要两件事:

  1. 项目需要”C++”:有了这个,我C++编译器/生成选项
  2. 启动代码需要调用全局C++构造函数
  3. 更改库设置

有了这个,我可以添加我的C++文件到以前的C项目。此处描述的步骤应适用于任何 Eclipse CDT 项目。根据 Eclipse 分发或 SDK 的不同,细节可能有所不同。我在此显示使用恩智浦 MCUXpresso IDE V11.1.1 的屏幕截图,使用作为 C 语言项目 (frdmk22f_led_blinky) 提供的 SDK 项目。

如果项目已创建为 C 项目,则通常只显示 C 编译器的选项:

Only C Compiler Options

仅 C 编译器选项

若要为项目C++,必须将以下性质添加到.project文件中。

Java

 

1
<自然>组织.日食cdt.核心自然</自然>

一种方法就是使用”文件 > 新”菜单,然后选择”转换为 C/C++项目(添加 C/C++自然):

Convert to C++

转换为C++

另一种方法就是使用Eclipse内部或外部的文本编辑器:

使用 Eclipse 内置编辑器时要小心。关闭项目,然后重新打开。

或者,Eclipse 内置 XML 编辑器可用于添加自然:

Added ccnature

添加了 ccnature

使用最新的 CDT,也有可能在项目属性中添加/删除一个性质(尽管它令人困惑,因为 C++ (CC) 性质显示为”C 自然”)(感谢 Jld00 的评论!

Adding C++ Nature in Project Properties

在C++属性中添加自然

设置包括编译器C++(如果在 Eclipse 内部进行了更改,请关闭并重新打开项目):

C++ Compiler Options

C++编译器选项

有了这个,我可以为项目中的C++设置编译器选项。

C++启动代码

在项目中找到 C 启动代码:

C startup code

C 启动代码

最简单的方法是将其重命名为具有 .cpp 扩展C++文件:

renamed startup code

重命名的启动代码

因此,启动代码将在C++编译。这假定启动代码的编写方式是,它实际上可以在 C++ 模式下编译,并且它使用__cplusplus”宏)。重要的是,在 C+ 模式下,它调用全局构造函数。使用 NewLib/Newlib-Nano 库,这是调用 main(): __libc_init_array():

Constructor Call

构造函数调用

__libc_init_array() 基本上是链接器与全局初始化器准备的函数列表,用于初始化库并调用所有全局构造函数。

验证是否调用构造函数,定义全局对象并在构造函数代码中设置断点。

Constructor Call during startup

启动期间的构造函数调用

这样,将完成适当的库初始化,并调用全局对象的构造函数。

图书馆

最后一件事是确保使用正确的库。MCUXpresso 中的”RedLib”等缩减库不支持C++,无法使用。NewLib-nano 针对大小进行了优化C++支持任何应用程序,但默认情况下不包括异常处理(请参阅文章末尾的链接)。

检查使用的库:如果不使用异常,newlib-nano 可以正常,否则切换到 newlib(但要为代码大小增加做好准备):

Library Usage

库使用情况

选择/切换库的另一种方法在链接器设置中:

Library Selection

库选择

有了这个,库可以与一个C++。

总结

将普通 C 项目转换为启用 C++ 的项目需要几个步骤:确保选择了 C++ 性质,启动代码调用全局构造函数,以及使用C++ 支持 C++ 的库。

快乐C++!

链接

Comments are closed.