EtherCard и значение Ethernet::buffer

Тема в разделе "Arduino & Shields", создана пользователем Gomez, 15 ноя 2017.

Метки:
  1. Gomez

    Gomez Нерд

    Использую библиотеку EtherCard для обращения к web-странице и получения оттуда определенных данных раз в 15 минут. Получаю, например, 130 знаков полезной информации (я понимаю, что существует http-хедер и так далее)
    Есть ли какая-нибудь формула расчета нужного значения в строке
    Код (C++):
    byte Ethernet::buffer[500];
    ,
    а то ведь место под переменные в Uno/Nano ой как мало, несмотря на рекомендации по оптимизации.
    И так экономишь на многом, а хочется подключить еще пару библиотек... :(
    («Белые пришли - грабют, красные пришли - грабют»(с);))

    В примерах к EtherCard есть в getStaticIP
    Код (C++):
    byte Ethernet::buffer[300];  // a very small tcp/ip buffer is enough here
    Но там скетч выполняет еще более простую задачу, нежели у меня.

    И вообще, какое значение имеет этот буфер?
    Вроде как у ENC28J60 встроенный буфер 8 Кб есть...
    Зачем отжирать память у Ардуины?
     
    Последнее редактирование: 15 ноя 2017
  2. brokly

    brokly Гик

    Нет никакой формулы.
    Можно так :
    Пишется подпрограмма отсылающая пакет, работает она в двух режимах: первый - просто идет посимвольный расчет пакета, второй - реальная отсылка. Сначала прогоняем данные в первом режиме, получаем размер, корректируем на длинну этой цифры, с готовым размером гоним данные на отправку во втором режиме.
    Второй вариант:
    Заведомо известен максимальный размер данных. Его и используем в хидере во время отправки, если реальных данных меньше, добиваем до максимума пробелами.

    Про буфер могу только предполагать, связано с тем, что пакеты передаются по сети блоками . Блок идет непрерывно, два блока в буфер, скорее всего складывать не комильфо. Поэтому сначала блок в аппаратный буфер ENCшки, потом из него в память ардуино, для обработки, пока обрабатываем первый, второй принимается. Если как то пытаться обрабатывать в буфере ENC, вообще сомневаюсь, что такое возможно, прием будет заблокирован, пока не освободиться этот самый буфер.
     
    Последнее редактирование: 15 ноя 2017
    arkadyf нравится это.