如何用C ++ 11到Arduino编程?(How to use c++11 to program

2019-09-01 03:37发布

如何使用c++11的编程Arduino的时候? 我想无论是使用Arduino的IDE或其他环境被罚款。 我最感兴趣的核心语言的改善,而不是要求标准库的变化的东西。

Answer 1:

随着1.6.6版本 ,Arduino的IDE默认启用的C ++ 11。

对于旧版本,请继续阅读:

这是很容易改变标志的工具链中的任何元素, 包括汇编器,编译器或归档。

测试在Arduino的IDE版本1.5.7(2014年7月发布)

  1. 找到platform.txt文件,
    • AVR架构=> {安装路径} \硬件\ Arduino的\ AVR \ platform.txt
    • SAM架构=> {安装路径} \硬件\ Arduino的\ SAM \ platform.txt
  2. 在这个文件中,你可以改变任何标志 ,例如,
    • compiler.c.flags用于更改默认的编译选项为C ++文件。
    • compiler.cpp.flags用于更改默认的编译选项为C ++文件。
  3. 您也可以将任何的“配方”或编译patters,在配置文件的相应部分,标题下的“AVR / SAM编译模式”。
  4. 进行更改之后, 必须重新启动Arduino的IDE,至少在1.5.7版本。

例如,

要启用C ++ 11(C ++ 0X),上的Arduino IDE版本1.5.7和1.5.8测试支持 ,则简单地在该行开始的末尾添加标志“-std = GNU ++ 11”与compiler.cpp.flags =”。

据预计,C ++ 11默认情况下, Arduino的IDE 不久的将来实现。 然而,随着1.5.8版本(2014年10月),它仍然是情况并非如此。



Answer 2:

默认启用Arduino的IDE 1.6.6和较新的有C ++ 11(它们具有编译器标志“-std = GNU ++ 11”中的platform.txt文件中设置)。



Answer 3:

首先,只gcc 4.7和以上(并且因此avr-gcc 4.7及以上)支持C++11 。 因此,检查安装的版本:

gcc --version
avr-gcc --version

如果avr-gcc是4.7或更高版本,那么你可以使用C++11

Arduino的IDE不支持自定义编译器标志。 这已经请求但尚未实施。

所以,你只剩下不必使用其他环境或直接在命令行编译程序。

在情况下,使用直接在命令行编译的avr-gcc ,你只需要添加一个额外的编译器标志为使C ++ 11的支持。

-std=c++11

对于具体的开发环境 ,大多数人支持的编译器标志的编辑在IDE中的编译选项。 上述标志需要被添加到标志为每个环境的列表。


C++0x是工作草案的名称C++11标准。 C++0x支持是gcc 4.3起。 不过,严格来说这是实验性的支持,所以你不能指望realiably C++11的功能存在。 这里是可用的相应版本功能的完整列表gcc 。 在功能的可用性avr-gcc将是一样的,在相应的可用什么gcc版本。

为编译器标志C++0x是:

-std=c++0x


Answer 4:

请注意,有指定的Arduino从IDE的其他标志或使用其他IDE(Eclipse中,代码块等)或命令行没有简单的方法。

作为一个黑客,你可以使用一个小的代理程序(应该是跨平台的):

//============================================================================
// Name        : gcc-proxy.cpp
// Copyright   : Use as you want
// Description : Based on http://stackoverflow.com/questions/5846934/how-to-pass-a-vector-to-execvp
//============================================================================

#include <unistd.h>

#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

int main(int argc, char *argv[]) {
    vector<string> arguments;
    vector<const char*> aptrs;

    // Additional options, one per line
    ifstream cfg((string(argv[0]) + ".ini").c_str());
    if (cfg.bad())
        cerr << "Could not open ini file (you're using proxy for some reason, er?)" << endl;

    string arg;
    while (cfg) {
        getline(cfg, arg);
        if(arg == "\r" || arg == "\n")
            continue;
        arguments.push_back(arg);
    }

    for (const string& arg : arguments)
        aptrs.push_back(arg.c_str());

    for (int i = 1; i < argc; ++i)
        aptrs.push_back(argv[i]);

    // Add null pointer at the end, execvp expects NULL as last element
    aptrs.push_back(nullptr);

    // pass the vector's internal array to execvp
    const char **command = &aptrs[0];

    return execvp(command[0], command);
}
  1. 编译程序。
  2. 重命名原始AVR-G ++。EXE到AVR-G ++。orig.exe(或任何其他名称)。
  3. 创建AVR-克++ ini文件,其中第一线是将原始程序完整路径。(例如d:\的Arduino \硬件\工具\ AVR \ BIN \ AVR-克++ orig.exe)和添加额外的参数,每行一个,如预期的。

你完成了!

实施例AVR-克++,这样的:

D:\Arduino\hardware\tools\avr\bin\avr-g++.orig.exe
-std=c++0x

希望帮助!



Answer 5:

我用伊诺和这工作:

ino build -cppflags="-std=c++0x"

这产生一个十六进制文件大小至少为15K(即与优化开启),比5K左右为标准构建,这是一个可怜的小Atmega328考虑。 可能对于很多更程序空间的微控制器的一个是好的。



文章来源: How to use c++11 to program the Arduino?