большая строка не компилируется

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

Не хочет компилится скетч со строкой большой длины, вот такой

String message2 = String ("<html><head><script>var connection = new WebSocket('ws://'+location.hostname+':81/', ['arduino']);connection.onopen = function () {  connection.send('Connect ' + new Date()); }; connection.onerror = function (error) {    console.log('WebSocket Error ', error);};connection.onmessage = function (e) {  console.log('Server: ', e.data);};function sendRGB() {  var r = parseInt(document.getElementById('r').value).toString(16);  var g = parseInt(document.getElementById('g').value).toString(16);  var b = parseInt(document.getElementById('b').value).toString(16);  if(r.length < 2) { r = '0' + r; }   if(g.length < 2) { g = '0' + g; }   if(b.length < 2) { b = '0' + b; }   var rgb = '#'+r+g+b;    console.log('RGB: ' + rgb); connection.send(rgb); }</script></head><body>LED Control:<br/><br/>R: <input id=\"r\" type=\"range\" min=\"0\" max=\"255\" step=\"1\" onchange=\"sendRGB();\" /><br/>G: <input id=\"g\" type=\"range\" min=\"0\" max=\"255\" step=\"1\" onchange=\"sendRGB();\" /><br/>B: <input id=\"b\" type=\"range\" min=\"0\" max=\"255\" step=\"1\" onchange=\"sendRGB();\" /><br/></body></html>");

почему не знаете?

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Оперативы не хватает.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Компилятор знает, почему не компилируется, он даже выдает сообщение, что ему не понравилось, а мы не знаем. Наверное это тайна или тест такой, кто тут телепат, нет?

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Ковычек больно много

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

xDriver пишет:

Ковычек больно много

все кавычки экранированы вроде.

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

Коллеги, кавычки ни при чем, вместо странички html, я тупо забивал в строку цифры от 0 до 9 и так 90 раз, без каких либо других символов и пробелов, итого 900 байт в строке. Результать тот же. убираю 50 символов(остаток 850), все нормально компилируется. скетч пустой, только первоначальный шаблон и строка, не думаю что ОЗУ не хватает.

 

 

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

Да и компилятор не ругется, как обычно деликатно указывая на ошибку, а тупо зависает, прогресс справа типа тоже встает колом. Вот скриншот:

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Класс String занимает несколько больше места в памяти, чем массив символов string.

может быть по этому?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

sally555 пишет:

Коллеги, кавычки ни при чем, вместо странички html, я тупо забивал в строку цифры от 0 до 9 и так 90 раз, без каких либо других символов и пробелов, итого 900 байт в строке. Результать тот же. убираю 50 символов(остаток 850), все нормально компилируется. скетч пустой, только первоначальный шаблон и строка, не думаю что ОЗУ не хватает.

Ардуино Уно?

Сообщения компилятора секретны?

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

изначально это вылезло в скетче под esp8266,  пробовал и под UNO, то же самое. Никаких сообщений компилятор не выводит, стопор на скриншоте

__Alexander
Offline
Зарегистрирован: 24.10.2012

разбей на две строки, видимо такая ИДЕ.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Похоже на баг в IDE, потому что она падает, что видно на скриншоте.

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

ну как же я вебклиенту буду html-страницу по частям отправлять?

__Alexander
Offline
Зарегистрирован: 24.10.2012

одну за одной.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Вряд ли в IDE дело. Просто почти килобайт вподряд - слишком много.

Попробуйте F()

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Можете считать как хотите, но exception в IDE это факт, который виден на скриншоте.
Про килобайт я ничего не говорил. Никто не спорит, что строка большая.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Да, очень похоже на косяк в ИДЕ. Скорее всего бяда с ихней "переделкой скетча". Можно попробовать скомпилять руками в arv-gcc. Делается относительно не сложно: открываете хоть тот же Блинк, только из того места, где у вас лежит этот скетч, а не из примеров. Включаете "болтливый режим" (выводить сообщения при компиляции) и запускаете на компиляцию. Там будет строка запуска avr-gcc+ с указанием путей куда он запихал файл для компиляции (временный каталог) .. вот переходите в него, копируете этот проблемный скетч тудаже и из консоли (командной строки) запускаете свой скетч на компиляцию через копи-пасте и правку (заменить название файла) .. смотрите чего кажет компилятор.

Скорее всего съест нормально. Можно ещё добавить в конце опцию -Е и получить файл после обработки препроцессором БЕЗ компиляции. Это на случай посмотреть как развернулись разные #define, если интересно. Компилятору на длину строки - пофиг.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Я так себе настраивал kate для работы в терминале БЕЗ Ардуино ИДЕ .. там же и сборщик пашет и avr-dude .. да и времнные каталоги уже свои. Просто смотрите чего да как ИДЕ запускаете и делаете себе "батник".

Да, если ещё добавлять компилятору опции для ассемблера -Wa,-achls=file_path_name.asm , то можно получить то, что выдает компилятор и полюбопытствовать чего попадает в Ассемблер.

А если добавить опции для линковщика -Wl,--cref -Wl,-map=map_file , то можно получить и перекрестные ссылки и карту памяти.

А можно добавлять команды и библиотекарю .. и hex файл выдать "куда нужно" и .. :)

__Alexander
Offline
Зарегистрирован: 24.10.2012

 

Да неважно какая длина, должно хавать всё. С массивом, который вы захотите разместить во флеш (const char mass[] PROGMEM) будет таже история. Голый winavr ясное дело что захавает, тут глюк это именно ИДЕ, даже по скриншоту видно что ошибку вываливает какая-то java.util. ))))

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

Старая добрая командная строка! Надо бы конечно попробовать скомпилировать напрямую без IDE, для чистоты эксперимента. Кто бы еще ткнул пальцем как это сделать. Где собирается эта вся штука я знаю. Вот что выдает IDE при удачной компиляции испытуемого скетча "sketch_dec09a.cpp":

C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\sketch_dec09a.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\sketch_dec09a.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-gcc -c -g -x assembler-with-cpp -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\wiring_pulse.S -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring_pulse.S.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\hooks.c -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\hooks.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\WInterrupts.c -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\WInterrupts.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\wiring.c -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\wiring_analog.c -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring_analog.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\wiring_digital.c -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring_digital.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\wiring_pulse.c -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring_pulse.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-gcc -c -g -Os -w -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\wiring_shift.c -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring_shift.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\abi.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\abi.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\CDC.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\CDC.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HardwareSerial.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial0.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HardwareSerial0.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial1.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HardwareSerial1.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial2.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HardwareSerial2.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial3.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HardwareSerial3.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\HID.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HID.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\IPAddress.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\IPAddress.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\main.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\main.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\new.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\new.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\Print.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\Print.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\Stream.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\Stream.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\Tone.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\Tone.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\USBCore.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\USBCore.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\WMath.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\WMath.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino\WString.cpp -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\WString.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring_pulse.S.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\hooks.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\WInterrupts.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring_analog.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring_digital.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring_pulse.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\wiring_shift.c.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\abi.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\CDC.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HardwareSerial.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HardwareSerial0.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HardwareSerial1.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HardwareSerial2.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HardwareSerial3.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\HID.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\IPAddress.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\main.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\new.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\Print.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\Stream.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\Tone.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\USBCore.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\WMath.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-ar rcs C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\WString.cpp.o 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-gcc -w -Os -Wl,--gc-sections -mmcu=atmega328p -o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/sketch_dec09a.cpp.elf C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp\sketch_dec09a.cpp.o C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/core.a -LC:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp -lm 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/sketch_dec09a.cpp.elf C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/sketch_dec09a.cpp.eep 
C:\Program Files\Arduino\hardware\tools\avr/bin/avr-objcopy -O ihex -R .eeprom C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/sketch_dec09a.cpp.elf C:\DOCUME~1\Admin\LOCALS~1\Temp\build706661096768778946.tmp/sketch_dec09a.cpp.hex 

Sketch uses 2&nbsp;760 bytes (8%) of program storage space. Maximum is 32&nbsp;256 bytes.
Global variables use 827 bytes (40%) of dynamic memory, leaving 1&nbsp;221 bytes for local variables. Maximum is 2&nbsp;048 bytes.

И как из этого выделить нужную строку запуска компилятора ума не приложу. 

Клапауций 123
Offline
Зарегистрирован: 06.12.2015

попробуй http://inotool.org/ если дефолтная ИДЕ падает

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

Кстати во временных папках при неудачной компиляции остается файл stderr.txt, файл ошибок я так понимаю, с вот таким содержанием:

Exception in thread "Thread-19" java.lang.StackOverflowError
	at java.util.regex.Pattern$Loop.match(Pattern.java:4765)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
	at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
	at java.util.regex.Pattern$Branch.match(Pattern.java:4604)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4785)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
	at java.util.regex.Pattern$BranchConn.match(Pattern.java:4568)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3777)
        ...
        ...
        ...

Про StackOverflowError пишут на сайте java "Thrown when a stack overflow occurs because an application recurses too deeply."

Logik
Offline
Зарегистрирован: 05.08.2014

Кривость ИДЕ очевидна. Но ТС не прав в своем подходе. Все в одну строку и так отправлять совсем не правильно. Разбивать нужно. Причем даже не на 2 а на много более. Смотрите например на фрагмент

var r = parseInt(document.getElementById('r').value).toString(16);  var g = parseInt(document.getElementById('g').value).toString(16);  var b = parseInt(document.getElementById('b').value).toString(16); 

Там жеж стока возможностей!

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

53,54 строки как понимаю у вас создают hex файл для дальнейшей заливки в машинку. Самой заливки тут нет, только компиляция.

Ошибка stackoverflow - да, переполнение стека, косяк ИДЕ.

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

Пробовал на IDE версии 1.6.7, такого косяка нет, но почему то не могу сдружить ее с пакетом для esp8266.

Я так и не пойму, как мне разделить строку с html-ным кодом в данном контексте:

    // handle index
    server.on("/", []() {
        // send index.html
        String message = "<html><head><script>var connection = new WebSocket('ws://'+location.hostname+':81/', ['arduino']);connection.onopen = function () {  connection.send('Connect ' + new Date()); }; connection.onerror = function (error) {    console.log('WebSocket Error ', error);};connection.onmessage = function (e) {  console.log('Server: ', e.data);};function sendRGB() {  var r = parseInt(document.getElementById('r').value).toString(16);  var g = parseInt(document.getElementById('g').value).toString(16);  var b = parseInt(document.getElementById('b').value).toString(16);  if(r.length < 2) { r = '0' + r; }   if(g.length < 2) { g = '0' + g; }   if(b.length < 2) { b = '0' + b; }   var rgb = '#'+r+g+b;    console.log('RGB: ' + rgb); connection.send(rgb); }</script></head><body>LED Control:<br/><br/>R: <input id=\"r\" type=\"range\" min=\"0\" max=\"255\" step=\"1\" onchange=\"sendRGB();\" /><br/>G: <input id=\"g\" type=\"range\" min=\"0\" max=\"255\" step=\"1\" onchange=\"sendRGB();\" /><br/>B: <input id=\"b\" type=\"range\" min=\"0\" max=\"255\" step=\"1\" onchange=\"sendRGB();\" /><br/></body></html>";
        
        server.send(200, "text/html", message);
 
    });

С "железками" у меня лучше получается дружить, их хоть можно потрогать))), а эти web-технологии просто амеба какая то. 

Piskunov
Offline
Зарегистрирован: 13.02.2014

Чисто ради интереса в 1.6.5 сформировал большую строку. 1500 символов. На большее в UNO не хватает памяти.

Но, если честно, не понимаю где такие штуки необходимы.

const PROGMEM char MsgPM1 [] = {"\
The first time we meet Tom Sawyer, he's in Aunt Polly's pantry, stealing \
from the jam jar. This is only the beginning of his rascally adventures. Tom "};
const PROGMEM char MsgPM2 [] = {"\
narrowly escapes being hit by Polly, then plays hooky for the rest of the \
day. When Aunt Polly finds out about this, thanks to Tom's snitch of a "};
const PROGMEM char MsgPM3 [] = {"\
brother Sid, he's sentenced to whitewash a fence the next day. But Tom \
gets out of the punishment by tricking the local boys into paying him for "};
const PROGMEM char MsgPM4 [] = {"\
the privilege of whitewashing the fence. Tom heads off to enjoy himself.\
On his way back home, he sees a girl standing in Jeff Thatcher's house. He "};
const PROGMEM char MsgPM5 [] = {"\
falls hopelessly in love and starts showing off for her. The next day, in \
Sunday school, Tom uses the loot he made with the fence scheme to buy a "};
const PROGMEM char MsgPM6 [] = {"\
bunch of 'tickets' from the other boys. He uses these tickets to get himself \
a Bible prize. But Tom makes a fool of himself in front of a visitor, Judge "};
const PROGMEM char MsgPM7 [] = {"\
Thatcher, and the rest of the Sunday school crowd, when he tells them all \
that the first two apostles were named 'David and Goliah'. "};
const PROGMEM char MsgPM8 [] = {"\
Before school the next day, Tom runs into Huckleberry Finn. Huck is the \
son of the town drunk and he has no mother, so he basically gets to do "};
const PROGMEM char MsgPM9 [] = {"\
whatever he wants. Everyone, including Tom, envies Huck. Tom and Huck \
start discussing various ways to cure warts, and then agree to meet up at "};
const PROGMEM char MsgPM10[] = {"\
the graveyard at midnight to try out a new cure involving a dead cat.\
Tom shows up at school late, prepared to make up an excuse, when he "};
const PROGMEM char MsgPM11[] = {"\
notices that the only seat open on the girl's side is next to that girl. So when \
the schoolmaster asks him to explain himself, he tells him that he's been "};
const PROGMEM char MsgPM12[] = {"\
talking to Huckleberry Finn, which shocks the schoolmaster. Tom is \
whipped and then 'forced' to go sit next to the girl. Tom impresses her with "};
const PROGMEM char MsgPM13[] = {"\
his awful drawing skills, then introduces himself. The girl's name is Becky. \
Just before Tom is pulled away by the schoolmaster for being disorderly, "};
const PROGMEM char MsgPM14[] = {"\
they agree to meet outside during recess.\
During recess, Tom gets Becky to tell her she loves him and to give him a "};
const PROGMEM char MsgPM15[] = {"\
kiss, but he mucks it all up when he mentions his old flame Amy Lawrence. \
He tries to make up by giving Becky a gift, but she throws it to the ground. "};
const PROGMEM char MsgPM16[] = {"\
Tom runs off to the woods and sulks for a while, but before too long he's \
dreaming about being an 'Indian' and a pirate. His fantasy is interrupted by "};
const PROGMEM char MsgPM17[] = {"\
Joe Harper, and the two boys play Robin Hood for the rest of the afternoon.\
That night, Tom sneaks out of the house and heads over to the graveyard "};
const PROGMEM char MsgPM18[] = {"\
with Huck Finn. Just as they are approaching, three men appear: Dr. \
Robinson, Injun Joe, and Muff Potter. The boys watch in horror as Injun Joe "};
const PROGMEM char MsgPM19[] = {"\
murders Dr. Robinson during a fight, and blames it on Muff Potter who, \
already drunk, had been knocked out in the middle of the scuffle. They run "};
const PROGMEM char MsgPM20[] = {"\
away as fast as they can. Once they've settled down, they promise never to \
tell anyone about what they've seen, write up a contract, and sign it in blood."};

String *message;

void setup() {
  Serial.begin (9600);
  Serial.println ();

  message = new String;
  ProgmemStringConcat(MsgPM1);
  ProgmemStringConcat(MsgPM2);
  ProgmemStringConcat(MsgPM3);
  ProgmemStringConcat(MsgPM4);
  ProgmemStringConcat(MsgPM5);
  ProgmemStringConcat(MsgPM6);
  ProgmemStringConcat(MsgPM7);
  ProgmemStringConcat(MsgPM8);
  ProgmemStringConcat(MsgPM9);
  ProgmemStringConcat(MsgPM10);
  ProgmemStringConcat(MsgPM11);
  ProgmemStringConcat(MsgPM12);
  ProgmemStringConcat(MsgPM13);
  ProgmemStringConcat(MsgPM14);
  ProgmemStringConcat(MsgPM15);
  ProgmemStringConcat(MsgPM16);
  ProgmemStringConcat(MsgPM17);
  ProgmemStringConcat(MsgPM18);
  ProgmemStringConcat(MsgPM19);
  ProgmemStringConcat(MsgPM20);
  Serial.print ("Variable 'message' length -> ");
  Serial.println ((*message).length());
  Serial.println (*message); // or do anything with "message"
  delete message;

}

void loop() {

}

void ProgmemStringConcat(const char StrCon[]){
  boolean ConcatEnable = false;
  unsigned int MsgLen = strlen_P(StrCon);
  for (int k = 0; k < MsgLen; k++){
      String *t = (String *) malloc(8*sizeof(*message));
      ConcatEnable = t;
      free (t);
      if (ConcatEnable) {
        (*message).concat((char)pgm_read_byte_near(StrCon + k));
      } else {
        Serial.println ("ProgmemStringConcat -> there is no free memory");
        return;
      };
  };
  return;
};

 

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

Piskunov пишет:

Чисто ради интереса в 1.6.5 сформировал большую строку. 1500 символов. На большее в UNO не хватает памяти.

Но, если честно, не понимаю где такие штуки необходимы.

И что, работает ваш вариант? А мой вариант не пробовали? Я же говорил для чего мне нужна такая строка, что же тут непонятного?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

В вашем варианте мне тоже непонятно зачем "топор использовать заместо скальпеля" или наоборот .. можно конечно, им даже бреются некоторые.

Ардуино - это платформа по управлению железками включить там, выключить .. ну при желании свистнуть что тут что-то не туда втыкнулось или свет пропал .. а вы пытаетесь это приспособить для работы с html, который болтлив, тяжел и предназначен для связей и обменов с совсем иными целями .. или надо железо поменять на то, которое приспособлено или задачу видоизменить, приспособив к железу .. а так, смешно просто. :)

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

Arhat109-2 пишет:

В вашем варианте мне тоже непонятно зачем "топор использовать заместо скальпеля" или наоборот .. можно конечно, им даже бреются некоторые.

Ардуино - это платформа по управлению железками включить там, выключить .. ну при желании свистнуть что тут что-то не туда втыкнулось или свет пропал .. а вы пытаетесь это приспособить для работы с html, который болтлив, тяжел и предназначен для связей и обменов с совсем иными целями .. или надо железо поменять на то, которое приспособлено или задачу видоизменить, приспособив к железу .. а так, смешно просто. :)

Ну я смеяться вам и не запрещаю, я и сам люблю посмеятся))). И причем здесь топор и скальпель не пойму, если IDE тупит, на другой версии все работает. Человек задает вопрос, если есть у вас решение подскажите, буду благодарен. Я уже говорил, что изначально баг вылез при написании скетча для WIFI модуля ESP8266, а не для Ардуино, а он предназначен именно для таких задач, да помощней Ардуинки будет. А задача у меня не очень то и тяжелая, есть контроллер для управления сыроваркой именно на Ардуино, обвешанный датчиками, LCD с сенсорным управлением, исполнительными устройсвами и т.д., все уже отлажено и работает, так вот есть потребность передавать некоторые данные от этого контроллера через WIFI модуль ESP8266, локальный роутер, на ноутбук в другом конце квартиры, для формирования отчетов и дальнейшего анализа. Данных не так много, передача коротких пакетов допустим каждые 5 сек по технологии WebSockets. Вообщем то связь между ESP8266 и ноутбуком тоже уже освоена, проблема со строкой вылезла, когда нужно было передавать WebClient-у на ноутбуке Html- страницу с управляющим скриптом на JavaScript. Вот как то так.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Спасибо что не запрещаете смеяться. :)

Решение банальное: каждый инструмент хорош ровно для своих задач и послабее он или помощней - никакой разницы. У Вас задача для дуньки - управление сыроваркой. Это её сфера применения. Но вам надо передавать "некоторые данные" .. ну так и передавайте ИХ, а не html-страницу обвешанную js-скриптами и прочей лабудой для html. И все ваши "проблемы" (которые вы сами себе и создали) отпадут сами собой. Не стоит скальпелем (ардуиной) дом рубить (html отсылать). А вот получив ТОЛЬКО данные, ноутбуком можете хоть веб-морду рисовать хоть в каком "всплывающем" интерфейсе показывать .. он с этим справится гораздо лучше дуньки.

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

Arhat109-2 пишет:
 У Вас задача для дуньки - управление сыроваркой. Это её сфера применения. Но вам надо передавать "некоторые данные" .. ну так и передавайте ИХ, а не html-страницу обвешанную js-скриптами и прочей лабудой для html. И все ваши "проблемы" (которые вы сами себе и создали) отпадут сами собой. Не стоит скальпелем (ардуиной) дом рубить (html отсылать).
Так я и не отсылаю html Ардуинкой, она у меня занимается тем чем должна, для этих целей есть esp8266, который и предназначен для этого. С его помощью можно видео передавать с камеры, не то что какую то килобайтную html-страницу.

Цитата:
 А вот получив ТОЛЬКО данные, ноутбуком можете хоть веб-морду рисовать хоть в каком "всплывающем" интерфейсе показывать .. он с этим справится гораздо лучше дуньки.

Можно конечно html-страницу со скриптом загружать прямо с локального диска или разместить ее у себя на хостинге), и все будет работать. Но если я возьму планшет или смарт и захочу подключится, то html-страницу нужно и туда переписывать. А так берешь и подключаешься с любого девайса. Почему собственно нет, если есть такая возможность?

inspiritus
Offline
Зарегистрирован: 17.12.2012

Ну почему же. Дунька все замечательно умеет. Как раз задача мониторинга и управления.

Ставится w5100 , хоть на нану (сейчас мега, пока отладка). Страница закидывается на SD. С нее и пересылается , только не буфером , а посимвольно. Вместе с нею живут AJAX - скрипты. 

Piskunov
Offline
Зарегистрирован: 13.02.2014

sally555 пишет:

 И что, работает ваш вариант? А мой вариант не пробовали? Я же говорил для чего мне нужна такая строка, что же тут непонятного?

Работает. Это легко проверить. Вариант приведён в полной форме.

Ваш вариант не пробовал, так как Вы привели фрагмент, который требуется дополнять, то есть домысливать Ваши действия. А при этом никто не сможет гарантировать, что я или кто либо ещё кроме Вас, сможет это сделать так, как это сделали Вы.

Ваша идея понятна, однако не ясно для чего Вам несколько переменных очень большого размера, которые по сути не нужны постоянно для работы программы. Почему бы не разместить инструкции, требуемые для Вашей программы в PROGMEM, а затем по мере необходимости выплёвывать их аккуратными порциями в сторону "сервера"?

sally555
sally555 аватар
Offline
Зарегистрирован: 28.05.2015

Piskunov пишет:
Почему бы не разместить инструкции, требуемые для Вашей программы в PROGMEM, а затем по мере необходимости выплёвывать их аккуратными порциями в сторону "сервера"?

Вот так тоже не прокатывает, строка 850 байт.

const String message2 PROGMEM = String ("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789");

"аккуратными порциями" - это как, можно подробней?

Piskunov
Offline
Зарегистрирован: 13.02.2014

Давайте попробуем так:

const PROGMEM char message2_part01 [] = {"<html><head><script>var connection = new WebSocket('ws://'+location.hostname+':81/', ['arduino']);"};
const PROGMEM char message2_part02 [] = {"connection.onopen = function () {  connection.send('Connect ' + new Date()); }; "};
const PROGMEM char message2_part03 [] = {"connection.onerror = function (error) {    console.log('WebSocket Error ', error);};"};
const PROGMEM char message2_part04 [] = {"connection.onmessage = function (e) {  console.log('Server: ', e.data);};"};
const PROGMEM char message2_part05 [] = {"function sendRGB() {  "};
const PROGMEM char message2_part06 [] = {"var r = parseInt(document.getElementById('r').value).toString(16);  "};
const PROGMEM char message2_part07 [] = {"var g = parseInt(document.getElementById('g').value).toString(16);  "};
const PROGMEM char message2_part08 [] = {"var b = parseInt(document.getElementById('b').value).toString(16);  "};
const PROGMEM char message2_part09 [] = {"if(r.length < 2) { r = '0' + r; }   "};
const PROGMEM char message2_part10 [] = {"if(g.length < 2) { g = '0' + g; }   "};
const PROGMEM char message2_part11 [] = {"if(b.length < 2) { b = '0' + b; }   "};
const PROGMEM char message2_part12 [] = {"var rgb = '#'+r+g+b;    "};
const PROGMEM char message2_part13 [] = {"console.log('RGB: ' + rgb); connection.send(rgb); }</script></head><body>LED Control:<br/><br/>"};
const PROGMEM char message2_part14 [] = {"R: <input id=\"r\" type=\"range\" min=\"0\" max=\"255\" step=\"1\" onchange=\"sendRGB();\" /><br/>"};
const PROGMEM char message2_part15 [] = {"G: <input id=\"g\" type=\"range\" min=\"0\" max=\"255\" step=\"1\" onchange=\"sendRGB();\" /><br/>"};
const PROGMEM char message2_part16 [] = {"B: <input id=\"b\" type=\"range\" min=\"0\" max=\"255\" step=\"1\" onchange=\"sendRGB();\" /><br/>"};
const PROGMEM char message2_part17 [] = {"</body></html>"};

String *message2 = NULL;

void setup() {
  Serial.begin (9600);
  Serial.println ();

  message2 = new String;
  ProgmemStringConcat(message2_part01);
  ProgmemStringConcat(message2_part02);
  ProgmemStringConcat(message2_part03);
  ProgmemStringConcat(message2_part04);
  ProgmemStringConcat(message2_part05);
  ProgmemStringConcat(message2_part06);
  ProgmemStringConcat(message2_part07);
  ProgmemStringConcat(message2_part08);
  ProgmemStringConcat(message2_part09);
  ProgmemStringConcat(message2_part10);
  ProgmemStringConcat(message2_part11);
  ProgmemStringConcat(message2_part12);
  ProgmemStringConcat(message2_part13);
  ProgmemStringConcat(message2_part14);
  ProgmemStringConcat(message2_part15);
  ProgmemStringConcat(message2_part16);
  ProgmemStringConcat(message2_part17);
  Serial.print ("Variable \"message2\" length -> ");
  Serial.println ((*message2).length());
  Serial.println (*message2); 
  // or do anything with "message2"
  delete message2;

}

void loop() {

}

void ProgmemStringConcat(const char StrCon[]){
  boolean ConcatEnable = false;
  unsigned int MsgLen = strlen_P(StrCon);
  for (int k = 0; k < MsgLen; k++){
      String *t = (String *) malloc(8*sizeof(*message2));
      ConcatEnable = t;
      free (t);
      if (ConcatEnable) {
        (*message2).concat((char)pgm_read_byte_near(StrCon + k));
      } else {
        Serial.println ("ProgmemStringConcat -> there is no free memory");
        return;
      };
  };
  return;
};

Да, с сожалению ethernet-шилда у меня нет, и в html я понимаю слабо.

Но с моей точки зрения должен быть способ отправки html-строки посимвольно, а не пачкой.

Это открывает большие возможности, потому что в PROGMEM можно запихать достаточно много информации.