Официальный сайт компании Arduino по адресу arduino.cc
Часть кода
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 20/06/2019 - 13:37
Всем привет.
Подскажите кто знает, что выполняет данная строка Serial.write((uint8_t *) &speed, sizeof(speed));
из такого куска взял
void loop() {
int speed = analogRead(1);
speed = map(speed, 0, 1023, -1000, 1000);
Serial.write((uint8_t *) &speed, sizeof(speed));
delay(20);
}
Разбираюсь тут с одним скетчем =)
данные уходят на stm32. Я так понимаю это конвертация какая то?
Это просто отправляют два байта таким вот способом, не знаком с стм, возможно, это было затеяно для согласования LE/BE.
https://forum.arduino.cc/index.php?topic=245065.0
Где-то в оперативной памяти ардуины лежит два байта int speed, хранящие значение от -1000 до 1000. (uint8_t *) & speed - это указатель на первый байт из этих двух. Sizeof(speed) поидее возвращает двойку. Serial.write отправляет в порт 2 байта, лежащие по этому указателю, то есть, само значение speed.
Смотрел монитор порта, там знаки-закорюки всякие идут)
что значит возвращает двойку?
И правильно идут, ведь отсылаются-то байты. Оператор sizeof возвращает количество байт, занимаемых переменной или структурой. В ардуине переменная типа int занимает в оперативной памяти 2 байта.
Спасибо
В ардуине переменная типа int занимает в оперативной памяти 2 байта.
Ардуина - это платформа, а не конкретный МК. И в ардуине int может занимать как два байта, так и 4 - это, как минимум, зависит от МК используемого. Вон - ардуина Дуе - имеет int размерностью 4 байта, ардуина же, не?