А метеостанция на чем, какой проц?но не могу его пока вставить в метеостанцию
А метеостанция на чем, какой проц?но не могу его пока вставить в метеостанцию
Тот код только для ESP. У других может быть Порядок байтов — Википедияэтот код от "pvvx" работает корректно и на ардуине и на есп8266
int32_t x;
int32_t xx2 ;
uint32_t xx1 ;
uint32_t xx0 ;
int8_t mx2 = readRegister(0x24);//Если первым передается старший разряд.
uint8_t mx1 = readRegister(0x25);
uint8_t mx0 = readRegister(0x26);
x = (xx2 * 256L * 256L)+ (xx1 * 256UL)+ xx0;
в таком виде начальный код заработал на ЕСПint8_t mx2 = readRegister(0x24);
И что за CPU на 64 bit?На какую? Для Arduino есть CPU с int в 4, 8, 16, 32, 64 бит
Arduino Pro Mini , проверил еще раз- работает корректноТот код только для ESP
В каких-то вариантах компилятора сработает, но только так:
- int x = ((int)readRegister(0x24)<<16)+ ((int)readRegister(0x25)<<8)+readRegister(0x26);
- int y = ((int)readRegister(0x27)<<16)+ ((int)readRegister(0x28)<<8)+readRegister(0x29);
- int z = ((int)readRegister(0x2A)<<16)+ ((int)readRegister(0x2B)<<8)+readRegister(0x2C);
ESP8266А метеостанция на чем, какой проц?
описание регистра есть в исходной программе автора там без знаковый байт@nikolz
(int)readRegister(0x27) - что тут описано?
Преобразование uint8_t в int?
Или преобразование int8_t в int?
Я например не знаю, как описана процедура readRegister().
И для точности надо сделать двойное преобразование x->int8_t->int.
замечу что ваше решение через union не универсально так как необходимо знать порядок хранения байт в числе, а он бывает разным.@nikolz
(int)readRegister(0x27) - что тут описано?
Преобразование uint8_t в int?
Или преобразование int8_t в int?
Я например не знаю, как описана процедура readRegister().
И для точности надо сделать двойное преобразование x->int8_t->int.
Задам вопрос по другому, есть ли какой ардуино процессор, в котором int по умoлчанию 64 бита.
на ардуине про мини начальный код работает корректно и отрицательные значения выдает.
этот код от "pvvx" работает корректно и на ардуине и на есп8266:
- union {
- int32_t i;
- int16_t w[2];
- uint8_t ub[4];
- } x;
- int8_t a;
- a = (int8_t) readRegister(0x24);
- x.w[1] = (int16_t) a;
- x.ub[1] = (uint8_t) readRegister(0x25);
но не могу его пока вставить в метеостанцию - компиллятор ругается словами "... does not name a type"
- x.ub[0] = (uint8_t) readRegister(0x26);
ESP8266
размер типа int определяется не компилятором а разрядностью CPU
Это можно определить самостоятельно или в SDK, для приложения или какой либы, даже для ESP.Задам вопрос по другому, есть ли какой ардуино процессор, в котором int по умoлчанию 64 бита.
Это чистые пожелания, а в реальности - бывает как угодно.размер типа int определяется не компилятором а разрядностью CPU
а компилятор делается с учетом CPU