Использую библиотеку 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 Кб есть... Зачем отжирать память у Ардуины?
Нет никакой формулы. Можно так : Пишется подпрограмма отсылающая пакет, работает она в двух режимах: первый - просто идет посимвольный расчет пакета, второй - реальная отсылка. Сначала прогоняем данные в первом режиме, получаем размер, корректируем на длинну этой цифры, с готовым размером гоним данные на отправку во втором режиме. Второй вариант: Заведомо известен максимальный размер данных. Его и используем в хидере во время отправки, если реальных данных меньше, добиваем до максимума пробелами. Про буфер могу только предполагать, связано с тем, что пакеты передаются по сети блоками . Блок идет непрерывно, два блока в буфер, скорее всего складывать не комильфо. Поэтому сначала блок в аппаратный буфер ENCшки, потом из него в память ардуино, для обработки, пока обрабатываем первый, второй принимается. Если как то пытаться обрабатывать в буфере ENC, вообще сомневаюсь, что такое возможно, прием будет заблокирован, пока не освободиться этот самый буфер.