Перейти к содержанию
    

Компилятор в Arduino не может соединить длинные строки

Добрый вечер!

Купил себе 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 символов

Как обойти этот баг?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сам код примера - последний на странице.

http://codius.ru/articles/GSM_модуль_SIM800L_часть_3

Родной пример компилируется на ура.

Но стоит дописать свой код обработки датчиков - начинаются пропускания строк.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите как сделана операция + для класса String.

Вопрос закроется сразу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите как сделана операция + для класса String.

Вопрос закроется сразу.

 

Спасибо, вижу буферы объявляются.

Увеличил размеры и не помогло.

Хотя программа дивит изменения в коде и пересобирает всё ядро.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Памяти у контролера не хватало.

Разбил большой буфер на порции, скармливая модему, и всё заработало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...