Ограничения Arduino и как их обойти?
- Войдите на сайт для отправки комментариев
Вс, 17/12/2017 - 21:39
Здравствуйте. Программирую Arduino UNO и столкнулся вот с чем:
Подключаю несколько библиотек для DS18B20-термодатчика, GPS, GPRS шилдов. И вроде всё хорошо, но когда пробую отослать POST-запрос, то часть строки теряется. И длина пропавшего куска напрямую зависит от числа подключённых библиотек. Если, например, убрать библиотеки для однопроводной передачи данных для DS18B20-термодатчика - строка полностью передаётся.
Вопрос: Можно ли эту проблему решить программно?
Или есть какое-то железо помощнее, другое поколение Arduino? Желательно, чтобы разъёмы были такие же как и у Arduino UNO, чтобы шилды также ставились, в ту жу позицию.
Это связано с размером оперативной памяти. Очевидно, что подключение каждой новой библиотеки расходует все больше паямти, поэтому. когда вы пытаетесь поместить в эту память еще и строку со своим POST-запросом, она туда не влезает. Проблему можно решить путем оптимизации кода. - например отказом от библиотек или болле экономным хранением длинной строки запроса...
Не наш метод!. Нам надо
железо помощнее
Вангую, там длиннющая строка для POST-запроса, да ещё и в оперативке висит, а не во флеше - вот шит хаппенс и случился :) Скетч выкладывайте, поржём, чо уж там :) Заодно и поможем, если пациент скорее жив, чем...
Вангую, там длиннющая строка для POST-запроса, да ещё и в оперативке висит, а не во флеше - вот шит хаппенс и случился :) Скетч выкладывайте, поржём, чо уж там :) Заодно и поможем, если пациент скорее жив, чем...
Скорее всего, не только это. Судя по наличию в коде библиотек для GSM и GPS - уверен, что строк в проекте предостаточно. А судя по вопросу автора, в программировании он новичок и прятать строки во флеш гаверняка не умеет...
А разве линкер не должен поругаться на нехватку памяти ?
Или в проекте неправильные настройки - для более мощного чипа с бОльшей памятью - потому и не ругается.
А разве линкер не должен поругаться на нехватку памяти ?
Или в проекте неправильные настройки - для более мощного чипа с бОльшей памятью - потому и не ругается.
Если нехватка памяти видна еще в момент сборки - должен. Но если автор скетча пользуется динамическим выделением памяти в момент выполнения, например через "удобный" класс String - то компилироваться будет, а нормально работать - нет.
Да нормальный класс String, просто надо уметь его готовить :)
+100500!
Если руки из задницы и мозги в ней же, то от типа int пострадать можно.
Да нормальный класс String, просто надо уметь его готовить :)
Так в том и проблема, что для того, чтобы грамотно использовать String нужна квалификация повыше, чем чтобы его вообще не использовать (заменив, например, на Си-строки)/
staffnz, оба пути возможны, и программный, и аппаратный.
В первом случае должен помочь полный отказ от хранения строк в оперативной памяти: фрагменты строк хранятся в PROGMEM, а результирующая строка передается наружу побайтно непосредственно из фрагментов без сборки ее целиком в ОП.
Ну а аппаратный - почитайте на главной странице Ардуино, какие бывают контроллеры, обратив особое внимание на размер оперативной памяти.