#1 2018-11-15 00:19:55

Ripper
Учасник
Зареєстрований: 2017-01-08
Повідомлень: 24

Arduino длинная строка

Какие лимиты на длину строки ...

мне надо отправить TCP пакетом строку с форматом JSON но похоже уперся в ограничение ...  как его обойти

Неактивний

#2 2018-11-17 21:11:47

Kaka
Учасник
Зареєстрований: 2018-03-21
Повідомлень: 411

Re: Arduino длинная строка

Нету лимитов. Только объём доступной памяти.

Неактивний

#3 2018-11-22 00:34:02

Gость
Гість

Re: Arduino длинная строка

А как же Google?

The absolute limitation on TCP packet size is 64K (65535 bytes), but in practicality this is far larger than the size of any packet you will see, because the lower layers (e.g. ethernet) have lower packet sizes. The MTU (Maximum Transmission Unit) for Ethernet, for instance, is 1500 bytes.

Но TCP же работает как поток из пакетов, поэтому вы не должны об этом думать, ведь в поток влезет сколько угодно данных, пока передача не оборвётся из-за посторонних причин.

Хотя есть всё же ограничение при передаче через HTTP GET:

Internet Explorer also has a maximum path length of 2,048 characters. This limit applies to both POST request and GET request URLs.If you are using the GET method, you are limited to a maximum of 2,048 characters, minus the number of characters in the actual path.
...
Most webservers have a limit of 8192 bytes (8KB), which is usually configureable somewhere in the server configuration.
...
If you need to send large data, then better use POST instead of GET. Its limit is much higher, but more dependent on the server used than the client. Usually up to around 2GB is allowed by the average webserver. This is also configureable somewhere in the server settings.

Ага, урок английского. Хотя Google-переводчик может помочь и в этом.

#4 2018-11-22 00:37:00

Gость
Гість

Re: Arduino длинная строка

PS: А если UDP пакетом, то надо ожидать более-менее надёжное прохождение строки размером где-то с 255 байт, как в старом Паскале))

#5 2018-12-03 11:07:59

Ripper
Учасник
Зареєстрований: 2017-01-08
Повідомлень: 24

Re: Arduino длинная строка

Странно периодически в связке TCP пакет ардуино и sock server на php с интервалом 0,5 сек периодически приходят битые пакеты ... и раз в несколько дней может еще ардуина зависнуть (ROM использовано на 96%) ...  если ввести большую строку на отправку банально + части, то кусок отрезается ...

То-есть ардуино работает а вот пакеты уже не идут ...

Остання редакція Ripper (2018-12-03 11:11:04)

Неактивний

#6 2018-12-03 19:39:40

Gость
Гість

Re: Arduino длинная строка

Если зависания более-менее стабильны по времени, то это похоже на утечку памяти (RAM). Хотя могут и просто помехи по питанию приходить.

Если данные портятся без видимых причин, то это может быть ошибочная работа с указателями или переполнение стека. Выход за границы массива/переполнение буфера - из той же оперы.

Обе эти ошибки трудно найти, это как в детектив играть.

#7 2018-12-04 01:13:50

Ripper
Учасник
Зареєстрований: 2017-01-08
Повідомлень: 24

Re: Arduino длинная строка

Не отпадаение сетевого стека рандомное  может 5 дней работать а может отпасть 2 раза в денть ... хотел пустить вещь в работу на объекте но это так не пойдет ...

ошибки переодически приходят либо полностью пустые строки приходят или отсудствует кусок данных ...

void postDATA(String dp){
   // Serial.println(dp);
    if (client.connect("domain.com.ua",12345)) {
    digitalWrite(LED_BUILTIN, HIGH);
    client.println(dp);
    //delay(32000UL);
    conn_retry = 0;
    digitalWrite(LED_BUILTIN, LOW);
    client.flush();
    client.stop();
    } else {
    //data to eprom
    conn_retry++;
      if(conn_retry > 10)
      {
      client.flush();
      client.stop();
      Ethernet.begin(mac);
      Ethernet.maintain();
      }
    }
}

отправляю данные этой функцией в моем случае интервал 1 сек

Вызывается

if((GET_TIME - ptimer) >= 1)
{
postDATA(String("action=data&type=temp
&value=" + String(t1)));
ptimer = GET_TIME;
}

хотел отправлять json но у arduino pro mini не хватает на это ресурсов (памяти).
Библиотека UIPEthernet.h
карточка enc28j60
Питается отдельно от 5В линейного стабилизатора ...

думал как-то собирать данные на отправку в масив и отправлять каскадом после прохода одного лупа и сбора всех данных конвеером в несколько пакетов но так и не понял как правильно строить массивы типа String чтобы потом поэлементно отправлять ...

Остання редакція Ripper (2018-12-04 01:16:38)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму