Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Компилятор в Arduino не может соединить длинные строки
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
baumanets
Добрый вечер!
Купил себе 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
А как определён тип String?
baumanets
Сам код примера - последний на странице.
http://codius.ru/articles/GSM_модуль_SIM800L_часть_3
Родной пример компилируется на ура.
Но стоит дописать свой код обработки датчиков - начинаются пропускания строк.
x893
Посмотрите как сделана операция + для класса String.
Вопрос закроется сразу.
baumanets
Цитата(x893 @ Feb 10 2018, 12:03) *
Посмотрите как сделана операция + для класса String.
Вопрос закроется сразу.


Спасибо, вижу буферы объявляются.
Увеличил размеры и не помогло.
Хотя программа дивит изменения в коде и пересобирает всё ядро.
baumanets
Памяти у контролера не хватало.
Разбил большой буфер на порции, скармливая модему, и всё заработало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.