реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Компилятор в Arduino не может соединить длинные строки
baumanets
сообщение Feb 9 2018, 14:59
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 398
Регистрация: 30-12-09
Из: Москва, Зеленоград
Пользователь №: 54 579



Добрый вечер!
Купил себе 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 символов
Как обойти этот баг?


--------------------
Go to the top of the page
 
+Quote Post
Den64
сообщение Feb 9 2018, 15:26
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



А как определён тип String?
Go to the top of the page
 
+Quote Post
baumanets
сообщение Feb 9 2018, 16:41
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 398
Регистрация: 30-12-09
Из: Москва, Зеленоград
Пользователь №: 54 579



Он определён в двух файлах:
https://github.com/arduino/Arduino/blob/mas...duino/WString.h
https://github.com/esp8266/Arduino/blob/mas...266/WString.cpp


--------------------
Go to the top of the page
 
+Quote Post
baumanets
сообщение Feb 9 2018, 18:18
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 398
Регистрация: 30-12-09
Из: Москва, Зеленоград
Пользователь №: 54 579



Сам код примера - последний на странице.
http://codius.ru/articles/GSM_модуль_SIM800L_часть_3
Родной пример компилируется на ура.
Но стоит дописать свой код обработки датчиков - начинаются пропускания строк.


--------------------
Go to the top of the page
 
+Quote Post
x893
сообщение Feb 10 2018, 09:03
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Посмотрите как сделана операция + для класса String.
Вопрос закроется сразу.
Go to the top of the page
 
+Quote Post
baumanets
сообщение Feb 11 2018, 09:23
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 398
Регистрация: 30-12-09
Из: Москва, Зеленоград
Пользователь №: 54 579



Цитата(x893 @ Feb 10 2018, 12:03) *
Посмотрите как сделана операция + для класса String.
Вопрос закроется сразу.


Спасибо, вижу буферы объявляются.
Увеличил размеры и не помогло.
Хотя программа дивит изменения в коде и пересобирает всё ядро.


--------------------
Go to the top of the page
 
+Quote Post
baumanets
сообщение Mar 8 2018, 09:14
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 398
Регистрация: 30-12-09
Из: Москва, Зеленоград
Пользователь №: 54 579



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


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 13:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01427 секунд с 7
ELECTRONIX ©2004-2016