0

我已经在android上编写了代码,可以正常工作,但在为“通用8266板”编译时无法正常工作。我有一个二维字符数组,因为8266编译器不接受字符串数组。它被设置为一组缓冲区和指向它们的指针数组。

字符缓冲区0[80];//储存容器字符缓冲区1[80];字符缓冲区2[80];字符缓冲区5[80];字符缓冲区6[80];//用于传输字符串的缓冲区//使用指针的字符缓冲区矩阵char*扫描[]={“缓冲区0,缓冲区1,缓冲区2,缓冲区3,缓冲区4,缓冲区5”};

这样编译正常,不会导致堆栈问题。我确实在Stackoverflow上查找了答案,但答案是负数,或者只适用于字符串到单个字符数组,而不是多维的,也不是从数组返回到字符串以打印或使用too控件的程序。

但我遇到了一些问题,包括编译器在基于ESP8266的板ESP-01上运行时未捕捉到的堆栈问题错误代码28/29。我使用#include编译代码。我试过了

char*strcpy_P(mess,Scans[0]);

mess.toCharArray(缓冲区0,80);

mess.toCharArray(扫描[i],80);

strcpy_P(扫描[i],混乱);

Mess是我想在变量“I”控制循环中放入数组的字符串。

我还尝试了中的所有char*to和from字符串https://arduino-esp8266.readthedocs.io/en/latest/PROGMEM.html?highlight=str#函数-到read-back-from-progmem他们都没有在8266上工作。

我希望能够将多个字符串的编译存储到一个字符串中。然后将其复制到循环中的一个char数组(bufferx)中,使用I指示将字符串放入哪个缓冲区。每一个都来自不同的wifi站,因此不能将它们归并在一起。

然后从正确的数组编号中删除它,将其打印为电子邮件中的行。它必须在ESP8266WiFi.h上编译,并且不会因堆栈错误而崩溃,因为它将在没有串行端口的情况下自动工作以将错误转储到。

2个答案2

重置为默认值
1

我已经尝试在我的Arduino IDE中编译您的代码,没有任何问题,它只是解决了。尝试在Arduino IDE中更新esp8266板。

无论如何,当您创建包含多个值的数组时,应该用逗号分隔每个值,并且每个值都应该用双引号括起来。

因此,不要使用此选项:

char*扫描[]={“缓冲区0,缓冲区1,缓冲区2,缓冲区3,缓冲区4,缓冲区5”};

你应该使用这个:

char*Scans[]={“buffer0”,“buffer 1”,“Buffer 2”,“cuffer 3”,“缓冲区4”,“缓冲器5”};

这是我的完整代码:

字符缓冲区0[80];字符缓冲区1[80];字符缓冲区2[80];字符缓冲区3[80];字符缓冲区4[80];字符缓冲区5[80];char*Scans[]={“buffer0”,“buffer 1”,“Buffer 2”,“cuffer 3”,“缓冲区4”,“缓冲器5”};串乱;无效设置(){}无效循环(){for(int i=0;i<=5;i++){mess.toCharArray(扫描[i],80);}}

希望能对您有所帮助。

0

感谢您的建议,ESP-01(8266芯片组)上不会出现崩溃的最终解决方案是//设置全局变量 字符缓冲区0[80];//储存容器 字符缓冲器1[80]; 字符缓冲区2[80]; 字符缓冲区3[80]; 字符缓冲区4[80]; 字符缓冲区5[80]; 字符缓冲区6[80];//用于传输字符串的缓冲区 //使用指针的字符缓冲区矩阵 烧焦扫描[]={缓冲区0,缓冲区1,缓冲区2,缓冲区3,缓冲区4,缓冲区5}; //将矩阵缓冲区复制回字符串//string=扫描[i]; //将字符串复制到矩阵字符数组 //mess.toCharArray(缓冲区0,80); 字符串mess=“”;超过缓冲区数会导致堆栈崩溃。代码strcpy_P(Scans[i],mess)和charstrstr_P(const char*haystack,PGM_P针)仅适用于只读常量。

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.