baumanets 13 9 февраля, 2018 Опубликовано 9 февраля, 2018 · Жалоба Добрый вечер! Купил себе arduino, захотелось поиграться с gsm-модемом. И обнаружил, что компилятор не может соединить правильно длинные строки. void getPDUPack(String *phone, String *message, String *result, int *PDUlen) { // Поле SCA добавим в самом конце, после расчета длины PDU-пакета *result += "01"; // Поле PDU-type - байт 00000001b *result += "00"; // Поле MR (Message Reference) *result += getDAfield(phone, true); // Поле DA *result += "00"; // Поле PID (Protocol Identifier) *result += "08"; // Поле DCS (Data Coding Scheme) //*result += ""; // Поле VP (Validity Period) - не используется String msg = StringToUCS2(*message); // Конвертируем строку в UCS2-формат String msg2 = "" + *message; Serial.println("msg: " + msg); *result += byteToHexString(msg.length() / 2); // Поле UDL (User Data Length). Делим на 2, так как в UCS2-строке каждый закодированный символ представлен 2 байтами. *result += msg; *PDUlen = (*result).length() / 2; // Получаем длину PDU-пакета без поля SCA *result = "00" + *result; // Добавляем поле SCA } StringToUCS2 длинную строку возвращает, но с msg она соединяться не хочет. Значение msg 041B0410041C041F0410003A0020003100200412041A041B002C00200412003A002000310039002E 003600300025002C00200422003A002000320034002E00320030002A0043 Но в result попадает часть строки из 13-30 символов Как обойти этот баг? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Den64 0 9 февраля, 2018 Опубликовано 9 февраля, 2018 · Жалоба А как определён тип String? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
baumanets 13 9 февраля, 2018 Опубликовано 9 февраля, 2018 · Жалоба Он определён в двух файлах: https://github.com/arduino/Arduino/blob/mas...duino/WString.h https://github.com/esp8266/Arduino/blob/mas...266/WString.cpp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
baumanets 13 9 февраля, 2018 Опубликовано 9 февраля, 2018 · Жалоба Сам код примера - последний на странице. http://codius.ru/articles/GSM_модуль_SIM800L_часть_3 Родной пример компилируется на ура. Но стоит дописать свой код обработки датчиков - начинаются пропускания строк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 55 10 февраля, 2018 Опубликовано 10 февраля, 2018 · Жалоба Посмотрите как сделана операция + для класса String. Вопрос закроется сразу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
baumanets 13 11 февраля, 2018 Опубликовано 11 февраля, 2018 · Жалоба Посмотрите как сделана операция + для класса String. Вопрос закроется сразу. Спасибо, вижу буферы объявляются. Увеличил размеры и не помогло. Хотя программа дивит изменения в коде и пересобирает всё ядро. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
baumanets 13 8 марта, 2018 Опубликовано 8 марта, 2018 · Жалоба Памяти у контролера не хватало. Разбил большой буфер на порции, скармливая модему, и всё заработало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться