Конкатенация строк Arduino

Я работаю над скетчом Arduino mega 2560. Мне нужно разобрать строки HTTP-запроса.

Моя программа объединяет строки для каждого HTTP-запроса. И у меня есть HTTP-запрос каждую секунду в течение всего дня.

Я читал, что такая работа может вызвать фрагментацию оперативной памяти. Я очень расстроен этим, потому что моя программа будет случайным образом падать, если нет свободной оперативной памяти.

Знаете ли вы, есть ли способ инициализировать строку с заданной длиной памяти?

Я не хочу работать с массивами символов, потому что мне нужны функции indexof, substring и сравнение с ==

Спасибо

, 👍0

Обсуждение

И сколько из этих объединенных запросов, по вашему мнению, поместится в память???, @AnT

Что плохого в использовании функций char*, предоставляемых C? Они могут делать все, что может String, без проблем фрагментации памяти, а если вам нужна функция, которой не существует, очень легко найти реализацию или создать ее самостоятельно., @Michel Keijzers


1 ответ


Лучший ответ:

2

Существует способ инициализировать String Arduino с заданной длиной памяти: см. метод reserve(). Как правило, это значительно уменьшает или полностью устраняет фрагментацию памяти, если вы можете позволить себе зарезервировать достаточный объем памяти заранее.

Просто имейте в виду, что это «мягкая» граница: как только ваша строка станет длиннее зарезервированного объема, String спокойно возобновит перераспределение памяти со всеми типичными последствиями.

Непонятно, что вы планируете делать, если предварительно зарезервированного объема памяти окажется недостаточно. Вернуться к «фрагментации памяти»? Все более сложное, чем это, будет столь же сложным, как и ручное управление массивом char[].

Все запрошенные вами функции доступны и для массивов char[], для этого может потребоваться добавить еще несколько строк кода. И неясно, почему может «нужно» сравнение быть == конкретно.

Это также может быть проблемой XY. Почему вы пытаетесь объединить все эти запросы в памяти? Что вы планируете делать с ними после того, как закончите «конкатенацию»?

,