Я вполне уверен, что объект SERIAL использует API Java (по крайней мере, раньше; реализация могла измениться, так как я работал с ним).Затраты на использование объектной системы MATLAB, в отличие от непосредственного общения с объектами Java в MATLAB, тривиальны.Поэтому я не стал бы пытаться пропустить объект SERIAL и перейти к «прямо на Java».
Мой вопрос к вам: «Есть ли у вас 1004 * попытки отправить каждыйбайт немедленно ? "Связь должна быть намного более эффективной, если вы используете большее значение для BytesAvailableFcnCount
.
Если ваше оборудование не имеет особых ограничений, я рекомендую выбрать больший размер буфера.( может потребовать принудительного сброса при завершении потока данных, поскольку вы не можете рассчитывать на саму запись байта автоматически. Но, вероятно, вы уже закрываете и удаляете объект в соответствующее время,поэтому не должно быть сложным дополнительно очищать буфер одновременно).
Если вы не укажете значение, MATLAB использует значение по умолчанию 48 байтов.Я не помню, как было выбрано это точное значение, но запись нескольких значений одновременно будет гораздо более эффективной, чем запись в буферы и их сброс в байты за раз.
РЕДАКТИРОВАТЬ: Другая мысль;У меня нет MATLAB для проверки этого прямо сейчас, но что произойдет, если вы не записываете данные в цикл for
- вместо этого оставьте для BytesAvailableFcnCount
значение 1, иfwrite весь буфер за один снимок?
Способ, которым я читаю документацию , BytesAvailableFcnCount
, определяет только "триггер" для того, насколько большим может быть буфер до его очистки, не насколько большой буфер может быть.Таким образом, наличие BytesAvailableFcnCount
из 1 и запись в буфер размером (скажем) 128 за один снимок может выполнить сброс на устройство только один раз вместо 128 раз, как это делает ваш существующий код.