Serial.write(val) и Serial.write(buf, len), в чем разница?

CrazyFizik
Offline
Зарегистрирован: 13.11.2012

Есть ли разница передачей бинарного кода массивом с помощью Serial.write(buf, len) и циклом с помощью Serial.write(val)?

Мне показалось, что есть, но я не уверен (может показалось). Если есть, то в чем она заключается?

И еще вопрос, откуда такое ограничение длины массива бинарного кода, передаваемого с помощью  Serial.write(buf, len) в 880 байт (что-то около того)? И почему именно такое число.

CrazyFizik
Offline
Зарегистрирован: 13.11.2012

Ну е-мое. Никто что ли не знает? Ладно я нуб, нубом привык работать с армами и кортексами...

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Предполагаю, что разница небольшая, если вообще есть. Я бы заглянул в исходники для начала.

UPD: как я и думал:

/* default implementation: may be overridden */
size_t Print::write(const uint8_t *buffer, size_t size)
{
  size_t n = 0;
  while (size--) {
    n += write(*buffer++);
  }
  return n;
}

Одно не понимаю, зачем про софт спрашивать в теме "аппаратные вопросы"?

 

step962
Offline
Зарегистрирован: 23.05.2011

CrazyFizik пишет:

И еще вопрос, откуда такое ограничение длины массива бинарного кода, передаваемого с помощью  Serial.write(buf, len) в 880 байт (что-то около того)? И почему именно такое число.

Ну, вообще-то это почти 40% всей доступной в ATMega328 RAM. А ведь в ней еще стек разместить надо, место под буфер ввода/вывода UART, то да се ... Да и пользователю под его переменные что-то оставить.

А у ATMega168 (а они тоже используются в некоторых модельках - та же Arduino mini, например) так и вообще вся RAM - какие-то жалкие 1024 байт... Минус стек, минус буфер UART (самый минимум - в последних версиях - вроде бы 64 байта). На то да се места уже и не остается.

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

CrazyFizik пишет:

Ну е-мое. Никто что ли не знает? Ладно я нуб, нубом привык работать с армами и кортексами...

Просто лень искать.

Читайте исходники, в частности, h-файлы, там все ограничения задефайнены. Если очень нужно - можно поменять.

h-файлы лежат в hardware\arduino\cores\arduino\