使用来自arduino程序的ESP8266芯片上的char数组

时间:2019-04-11 18:57:36

标签: arrays string arduino char esp8266

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

char buffer0[80] ; // storage containers
    char buffer1[80] ; 
    char buffer2[80] ;
    char buffer5[80] ;
    char buffer6[80] ; // buffer used to transport strings
    // Matrix of char buffers using pointers
    char *Scans[] = {"buffer0 , buffer1 , buffer2 , buffer3 , buffer4 , buffer5"};

这可以编译,并且不会引起堆栈问题。我确实在Stackoverflow上查找了答案,但是答案是负的或仅适用于将字符串放入单个char数组中,而不是多维的,也不将数组外的字符串返回以用于打印或使用过于控制程序的字符串。 >

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

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

mess.toCharArray(buffer0, 80);

mess.toCharArray(Scans[i], 80);

strcpy_P(Scans[i], mess);

Mess是我要在变量“ i”受控循环中放入数组的字符串。

我也尝试了所有char *往返字符串 https://arduino-esp8266.readthedocs.io/en/latest/PROGMEM.html?highlight=str#functions-to-read-back-from-progmem 他们都不在8266上工作。

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

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

2 个答案:

答案 0 :(得分:2)

我尝试在Arduino IDE中编译您的代码,没有问题持续存在,它可以解决。尝试在Arduino IDE中更新esp8266开发板。

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

所以,不要使用这个:

    char *Scans[] = {"buffer0 , buffer1 , buffer2 , buffer3 , buffer4 , buffer5"};

您应该使用此:

    char *Scans[] = {"buffer0" , "buffer1" , "buffer2" , "buffer3" , "buffer4" , "buffer5"};

这是我的完整代码:

    char buffer0[80];
    char buffer1[80];
    char buffer2[80];
    char buffer3[80];
    char buffer4[80];
    char buffer5[80];

    char *Scans[] = {"buffer0" , "buffer1" , "buffer2" , "buffer3" , "buffer4" , "buffer5"};
    String mess;

    void setup() {}

    void loop() {
      for (int i = 0; i <= 5; i++) {
        mess.toCharArray(Scans[i], 80);
      }
    }

希望获得帮助。

答案 1 :(得分:0)

Thanks for the suggestion, the final solution that causes no crashes on the ESP-01 (8266 chipset) is //设置全局变量 char buffer0 [80]; //存储容器 字符缓冲区1 [80]; 字符缓冲区2 [80]; 字符缓冲区3 [80]; 字符缓冲区4 [80]; {{ 1}}字符缓冲区5 [80]; 字符缓冲区6 [80]; // //用于传输字符串的缓冲区 //使用指针的 char缓冲区矩阵char Scans [] = {buffer0,buffer1,buffer2,buffer3,buffer4,buffer5}; {{1 }} //将Matrix缓冲区复制回String               // string = Scans[i];     // Copies string into Matrix char Array 超过缓冲区数量会导致堆栈崩溃。 代码strcpy_P(Scans [i],混乱)和char strstr_P(const char *干草堆,PGM_P针)仅适用于只读常量。