Часть кода

vfear
Offline
Зарегистрирован: 20.06.2019

Всем привет.
Подскажите кто знает, что выполняет данная строка 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. Я так понимаю это конвертация какая то?

negavoid
Offline
Зарегистрирован: 09.07.2016

Это просто отправляют два байта таким вот способом, не знаком с стм, возможно, это было затеяно для согласования LE/BE.

https://forum.arduino.cc/index.php?topic=245065.0

Где-то в оперативной памяти ардуины лежит два байта int speed, хранящие значение от -1000 до 1000. (uint8_t *) & speed - это указатель на первый байт из этих двух. Sizeof(speed) поидее возвращает двойку. Serial.write отправляет в порт 2 байта, лежащие по этому указателю, то есть, само значение speed.

vfear
Offline
Зарегистрирован: 20.06.2019

Смотрел монитор порта, там знаки-закорюки всякие идут)

что значит возвращает двойку?

negavoid
Offline
Зарегистрирован: 09.07.2016

И правильно идут, ведь отсылаются-то байты. Оператор sizeof возвращает количество байт, занимаемых переменной или структурой. В ардуине переменная типа int занимает в оперативной памяти 2 байта.

vfear
Offline
Зарегистрирован: 20.06.2019

Спасибо

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

negavoid пишет:

В ардуине переменная типа int занимает в оперативной памяти 2 байта.

Ардуина - это платформа, а не конкретный МК. И в ардуине int может занимать как два байта, так и 4 - это, как минимум, зависит от МК используемого. Вон - ардуина Дуе - имеет int размерностью 4 байта, ардуина же, не?