Отправка части байтового массива

1

Я читаю данные из последовательного порта (в Arduino) и создавая его (синхронизируя на несколько байтов). Для этого я читаю данные в большой буфер. Как только я получил фрейм, я извлекаю данные, и я хочу отправить его на другой последовательный порт, используя serial.write (Serial.write(buf, len)), который принимает массив байтов и его размер.

Поскольку размер данных может быть случайным, мне нужно что-то вроде динамического массива (который не рекомендуется в Arduino). Есть идеи?

  • 0
    Если у вас уже есть это в большом массиве, почему вы не можете просто отправить соответствующую часть этого. Вы можете указать на большой буфер и использовать длину, которая содержит соответствующую часть для отправки. Единственное, что вы не можете сделать, это изменить содержимое этого буфера во время отправки.
  • 0
    Ну, динамический размер не рекомендуется, но не запрещен;) если он вам действительно нужен, вы должны его использовать (однако помните, что существуют ограничения). Однако в большинстве случаев динамический размер можно заменить созданием максимизированного массива фиксированной длины (например, если вы можете отправить строку от 2 до 16 символов, используйте массив из 16 символов). В этом случае, однако, поскольку вам не нужно изменять его, просто отправьте часть массива без дублирования (как отвечает dasblinkenlight)
Теги:
arrays
arduino

1 ответ

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

Поскольку размер данных может быть случайным, мне нужно что-то вроде динамического массива

В C вам редко нужен динамический массив, потому что массивы, переданные в функции, не несут с собой их размер. Вот почему все функции, которые принимают массив, также занимают много места.

Скажем, у вас есть данные внутри bigBuffer в позиции startPos, и вы хотите отправить length байтов. Все, что вам нужно сделать, это

Serial.write(&bigBuffer[startPos], length);

или с арифметическим синтаксисом указателя

Serial.write(bigBuffer+startPos, length);
  • 0
    Спасибо! Мне нравятся простые решения :)
  • 0
    @ 1qazxsw2 length=endPosition-startPosition , верно? (добавить один, если endPosition ).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню