Александр Терентьев (aterentiev) wrote,
Александр Терентьев
aterentiev

Category:

Arduino Ethernet

Баловался на днях Ethernet-шилдом Ардуины, который на W5100, и обнаружил интересную вещь, или даже, если хотите, баг. Когда отвечаешь родной библиотекой клиенту с помощью client.print(), данные посылаются фрагментами, причем по PDU на каждый байт! Неудивительно, что все работает так медленно - более 60 байтов overhead-а на байт... Ответ же client.write() посылает фрагментом весь буфер.

В дискуссии с ua9uqb проанализировали поведение - точно баг. Надо переделывать библиотеку. Странно, что до сих пор очень мало инфы по этому поводу в этих ваших интернетах, видимо, всем таких пакетов хватает.

Детальный анализ показывает, что класс EthernetClient реализует client.write() непосредственно у себя, прямо вызывая socket.send() и тупо передавая ему буфер. client.print() же наследован через цепочку (EthernetClient - Client - Stream - Print) аж от класса Print, в котором, внимание, делается такое:

  for (uint16_t i = 0; i < s.length(); i++) {
    n += write(s[i]);
  }

To есть, client.print() из-за особенностей реализации, посылает всегда посимвольно. И не спасает даже тот факт, что .write переопределено в дочерних классах, базовая реализация .print нетронута и шлет именно так.

Надо или переписывать библиотеку, или делать класс-обертку с реализацией буфера, a памяти и без того мало. Но что меня напрягает, так это тот факт, что у W5100 есть своих 16К памяти, которые можно использовать как буфер в том числе и на передачу, а из-за такой реализации они используются максимум на прием.

Разгребусь - доделаю.
Tags: arduino, Программизмы, Хозяйке на заметку, Электроника
Subscribe

  • А расскажите про WiFi-Mesh?

    Ибо в этих ваших интернетах такой бред иногда написан. Меня интересует построение дома полностью покрывающей дом Mesh-сети на 4 АР. Особенность - к…

  • WiFi Prioritizer

    Писал я давеча об администрировании WiFi на смартфонах, тогда же нашел WiFi Prioritizer и обещал посмотреть, на что этот зверь способен.…

  • Администрирование WiFi андроида

    Вот чего мне в новомодных гаджетах с WiFi не хватает (это касается и компов, и сматрфоонов), так это suspend для настроенных WiFi-сетей без их…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 44 comments

  • А расскажите про WiFi-Mesh?

    Ибо в этих ваших интернетах такой бред иногда написан. Меня интересует построение дома полностью покрывающей дом Mesh-сети на 4 АР. Особенность - к…

  • WiFi Prioritizer

    Писал я давеча об администрировании WiFi на смартфонах, тогда же нашел WiFi Prioritizer и обещал посмотреть, на что этот зверь способен.…

  • Администрирование WiFi андроида

    Вот чего мне в новомодных гаджетах с WiFi не хватает (это касается и компов, и сматрфоонов), так это suspend для настроенных WiFi-сетей без их…