Arduino环境搭建之STL配置开发-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7038|回复: 6

Arduino环境搭建之STL配置开发

[复制链接]
发表于 2014-7-27 22:32 | 显示全部楼层 |阅读模式
Arduino环境搭建之STL配置开发
STL做为C++的标准库,提供了诸多强大的模板容器,算法,更重要的是功能稳定,如果arduino支持,将为代码开发提供诸多便利,索性STL是支持的。轻松配置一下即可。
下载安装配置STL相关文章
http://andybrown.me.uk/wk/2011/01/15/the-standard-template-library-stl-for-avr-with-c-streams/
下载路径
http://www.andybrown.me.uk/wk/wp-content/download-files/avr-stl-1.1.zip
安装方法
解压avr-stl-1.1.zip文件,将arv-stl\include下的所有文件复制到arduino的文档包含目录Arduino\hardware\tools\avr\avr\include下。
使用STL开发需求描述
1.      使用vector容器测试STL是否能在arduino环境中正常工作。
2.      编写一个测试例子,能够将存入数据依次遍历或做其它更多相关工作。
3.      解决在使用过程中遇到的编译问题。
示例代码
using namespace std;
typedef vector<int> int_vector;
void setup() {
         Serial.begin(9600);
         
         int_vectorl_vector;
         l_vector.push_back(1);
         l_vector.push_back(2);
         l_vector.push_back(3);
         l_vector.push_back(4);
         l_vector.push_back(5);
         int_vector::iteratorpos = l_vector.begin();
         while(pos!= l_vector.end()){
             // statement
             Serial.print("value:");
              Serial.println(*pos);
             pos ++;
         }
}
void loop() {
}
编译时发现无法正常编译,提示如下错误:
D:\Program Files(x86)\Arduino\hardware\tools\avr\avr\include/stl_iterator.h:589:error: expected type-specifier before 'char_traits'
D:\Program Files(x86)\Arduino\hardware\tools\avr\avr\include/stl_iterator.h:589: error: expected '>' before 'char_traits'
D:\Program Files(x86)\Arduino\hardware\tools\avr\avr\include/stl_iterator.h:595: error: ISO C++forbids declaration of 'basic_istream' with no type
D:\Program Files(x86)\Arduino\hardware\tools\avr\avr\include/stl_iterator.h:595: error:expected ';' before '<' token
D:\Program Files(x86)\Arduino\hardware\tools\avr\avr\include/stl_iterator.h:599: error: '_Dist'does not name a type
D:\Program Files(x86)\Arduino\hardware\tools\avr\avr\include/stl_iterator.h:604: error:expected `)' before '&' token
…….
通过查找资料:http://forum.arduino.cc/index.php/topic,101854.0.html,发现需要增加头文件#include<iterator>
重新编译,再次出现问题:
D:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include/stl_construct.h:48:undefined reference to `operator new(unsigned int, void*)'
D:\Program Files(x86)\Arduino\hardware\tools\avr\avr\include/stl_construct.h:48: undefinedreference to `operator new(unsigned int, void*)'
D:\Program Files(x86)\Arduino\hardware\tools\avr\avr\include/stl_construct.h:48: undefinedreference to `operator new(unsigned int, void*)
再次通过查看STL官方文档,得知需要包含 pnew.cpp 文件,才能正常编译,随后增加,最张文件如下:
#include <iterator>
#include <vector>
#include <pnew.cpp>
using namespace std;
…..
此时,代码可正常编译通过。
代码验证
在端口中输出如下数据:
value:1
value:2
value:3
value:4
value:5
说明vector数据有效。

avr-stl-1.1.zip

197.29 KB, 下载次数: 77

发表于 2014-7-28 00:10 | 显示全部楼层
赞,谢谢楼主分享
发表于 2014-7-28 10:14 | 显示全部楼层
不错,不知道编译后大小怎么样?
发表于 2015-5-23 16:26 | 显示全部楼层
请问楼主能存放到对象进去吗?比如vector<ClassName>
发表于 2016-6-19 23:09 | 显示全部楼层
本帖最后由 amaverick 于 2016-6-19 23:27 编辑

不行啊,有很多编译错误。我的IDE是1.6.9。作者Andy的blog上也有很多人报错。1点几版本的Arduino IDE还可以,新的不行。
发表于 2016-8-2 12:02 | 显示全部楼层
amaverick 发表于 2016-6-19 23:09
不行啊,有很多编译错误。我的IDE是1.6.9。作者Andy的blog上也有很多人报错。1点几版本的Arduino IDE还可以 ...

哥们 用用这个试试
https://github.com/maniacbug/StandardCplusplus
发表于 2024-12-28 22:32 | 显示全部楼层

dubllikat at is ru

https://dubllikat.ru/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-29 21:05 , Processed in 0.080685 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表