Конкатенация строк Arduino
Я работаю над скетчом Arduino mega 2560. Мне нужно разобрать строки HTTP-запроса.
Моя программа объединяет строки для каждого HTTP-запроса. И у меня есть HTTP-запрос каждую секунду в течение всего дня.
Я читал, что такая работа может вызвать фрагментацию оперативной памяти. Я очень расстроен этим, потому что моя программа будет случайным образом падать, если нет свободной оперативной памяти.
Знаете ли вы, есть ли способ инициализировать строку с заданной длиной памяти?
Я не хочу работать с массивами символов, потому что мне нужны функции indexof, substring и сравнение с ==
Спасибо
@Bob5421, 👍0
Обсуждение1 ответ
Лучший ответ:
Существует способ инициализировать String
Arduino с заданной длиной памяти: см. метод reserve()
. Как правило, это значительно уменьшает или полностью устраняет фрагментацию памяти, если вы можете позволить себе зарезервировать достаточный объем памяти заранее.
Просто имейте в виду, что это «мягкая» граница: как только ваша строка станет длиннее зарезервированного объема, String
спокойно возобновит перераспределение памяти со всеми типичными последствиями.
Непонятно, что вы планируете делать, если предварительно зарезервированного объема памяти окажется недостаточно. Вернуться к «фрагментации памяти»? Все более сложное, чем это, будет столь же сложным, как и ручное управление массивом char[]
.
Все запрошенные вами функции доступны и для массивов char[]
, для этого может потребоваться добавить еще несколько строк кода. И неясно, почему может «нужно» сравнение быть ==
конкретно.
Это также может быть проблемой XY. Почему вы пытаетесь объединить все эти запросы в памяти? Что вы планируете делать с ними после того, как закончите «конкатенацию»?
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
И сколько из этих объединенных запросов, по вашему мнению, поместится в память???, @AnT
Что плохого в использовании функций char*, предоставляемых C? Они могут делать все, что может String, без проблем фрагментации памяти, а если вам нужна функция, которой не существует, очень легко найти реализацию или создать ее самостоятельно., @Michel Keijzers