Использование набора символов на чипе ESP8266 от программы Arduino - PullRequest
1 голос
/ 11 апреля 2019

Я написал код на Android, который работает, но он не работает при компиляции для "универсальной платы 8266". У меня есть двумерный массив символов, поскольку строковые массивы не принимаются в компиляторе 8266. Он настроен как набор буферов и массив указателей, указывающих на них.

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, которые не были обнаружены компилятором при его запуске на ESP-01, который основан на плате ESP8266. Я использовал #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 / ен / последний / PROGMEM.html? Выделить = ул # функции для чтения-обратно-от-PROGMEM и ни один из них не работает на 8266.

Я хочу иметь возможность хранить компиляцию нескольких строк в одну строку. Затем скопируйте его в один из массивов символов (bufferx) внутри цикла, используя i, чтобы указать, в какой буфер помещать строку. Все они с разных станций Wi-Fi, поэтому их нельзя объединять.

Затем удалите его из правильного номера массива, чтобы распечатать его в виде строк в электронном письме. Он должен компилироваться на ESP8266WiFi.h и не падать с ошибками стека, так как он будет работать автономно без последовательного порта для вывода ошибок в.

Ответы [ 2 ]

2 голосов
/ 11 апреля 2019

Я пытался скомпилировать ваш код в моей Arduino IDE, проблем не осталось, просто получилось.Попробуйте обновить плату esp8266 в Arduino IDE.

В любом случае, когда вы создаете массив, содержащий несколько значений, вы должны разделять каждое значение запятыми, а каждое значение должно быть заключено в двойные кавычки.

, поэтомувместо того, чтобы использовать это:

    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 голосов
/ 15 апреля 2019

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]; символ буфера5 [80]; символ буфера6 [80];// буфер, используемый для транспортировки строк // Матрица буферов символов с использованием указателей char Scans [] = {buffer0, buffer1, buffer2, buffer3, buffer4, buffer5}; // копирует MatrixБуферы обратно в строку // 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 * стог сена, игла PGM_P) работают только с константами только для чтения.

...