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数据有效。 |