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

问题描述 投票:1回答:2

我已经在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上查找了答案,但是答案是减号或仅用于将字符串转换为单个字符数组,而不是多维度,而不是从数组中返回字符串进行打印或使用过程控制程序。

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

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

mess.toCharArray(buffer0, 80);

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

strcpy_P(Scans[i], mess);

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

我还尝试了https://arduino-esp8266.readthedocs.io/en/latest/PROGMEM.html?highlight=str#functions-to-read-back-from-progmem中的所有char *和来自字符串的所有char *,它们都不适用于8266。

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

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

arrays string arduino char esp8266
2个回答
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);
      }
    }

希望这个帮助。


0
投票

Thanks for the suggestion, the final solution that causes no crashes on the ESP-01 (8266 chipset) is //设置全局变量 char buffer0 [80]; // storage containers char buffer1 [80]; char buffer2 [80]; char buffer3 [80]; char buffer4 [80]; char buffer5 [80]; char buffer6 [80]; //用于传输strings 的缓冲区//使用pointers char的char缓冲区矩阵扫描[] = {缓冲区0,缓冲区1,缓冲区2,缓冲区3,缓冲区4,缓冲区5}; //将矩阵缓冲区复制回字符串// string = Scans[i]; // Copies string into Matrix char Array // mess.toCharArray(buffer0, 80); String mess = "";超过数量缓冲区导致堆栈崩溃。代码strcpy_P(Scans [i],mess)和char strstr_P(const char * haystack,PGM_P needle)仅适用于只读常量。

© www.soinside.com 2019 - 2024. All rights reserved.