Это число или поток из uart?
Если я правильно Вас пронял, и "7F" это "А" в Вашей формуле; B==0x22 ; C==0x12, то в таком случае легче нам будет, если мы представим все числовые константы как бинарные числа и вспомним что AVR, в принципе своём умеют из математических простых операций только сложение и вычитание и битовый сдвиг. Для умножения/деления применяются сложные функции, которые спрятаны в библиотеках.
То есть это нужно всего лишь для того, что бы убрать лишние ноли? это 2й операндр, что ли?
это Ваше DEC268435455 == 0b1111111111111111111111111111 в бинарном представлении, которое делает операцию побитового И совершенно лишней.
При операции (A<<24) и остальным подобным, где "А" - тип байт, имеем всего 8 байт!!!
И правильно делаете, исправился выше. А по сдвигам, я в курсе, попадал на то, что компилятор предупреждает и пропускает такое безобразие. Надо делать так- value = (((A|0UL)<<24)+((B|0UL)<<16)+((C|0UL)<<8)+D);
Да, с предварительным отбрасыванием четырёх старших битов. Почему они лишние - не знаю...ElectroMechaniC писал(а): ↑05.10.2018{, 13:26}тоесть моя последовательность это и есть преобразование в десятичное число / на 100 ?
Код: Выделить всё
byte* ptrin_x;
ptrin_x = (byte*)(& out );
*ptrin_x = in_H_byte;
*(ptrin_x+1) = in_h_byte;
*(ptrin_x+2) = in_l_byte;
*(ptrin_x+3) = in_L_byte;
Теперь разрешите мне усомниться. и сменить тип данных выхода на...?
Может потому, что не влезут во float? Я потому и писал о double и вынес деление на 100,0 из блока.
Александр, ну так не честно. Откуда мне знать и зачем, что речь идёт об одометре? Это первый раз упомянулось в предыдущем 14-м сообщении. Для меня показатель - калькулятор программиста и 32-х или ставшее уже 28-и битное слово разделённое на 100.0. И ещё,
которые всегда, при любом значении А будут == 0, и после чего не влезают ещё 4 старших бита этого же А при значениях больше 127 (0xF). Может тогда есть смысл облегчить страдания Arduino и вставить строку if (A>0xF) A=0xF;
Может я и не сильно шарю в С++, но как 127 == 0xF, 0x0F ???? Я всегда считал F==15.....Labu559 писал(а): ↑05.10.2018{, 20:17}которые всегда, при любом значении А будут == 0, и после чего не влезают ещё 4 старших бита этого же А при значениях больше 127 (0xF). Может тогда есть смысл облегчить страдания Arduino и вставить строку if (A>0xF) A=0xF;
Пожалуй лучше объяснит проект ниже с максимальными значениями, которые могут принимать байтовые B,C,D и переключением значения A с 255(0xFF) к 127(0x0F).
Александр, ну елки-палки, никто не сомневается в тебе, даже более того, я уверен что ты прекрасно понял, что я имел ввиду под "A с 255(0xFF) к 127(0x0F)", хотя должен был написать 0x000000FF и 0x0000000F , и как это
Не могу согласится.
Саша, посмотри, пожалуйста, методы и результаты в этом проекте. С 4-й платой- понятно и так, выше писали уже. Я же понимаю, что Флоат- тип данных одинарной точности, но чтобы старших 4бита так мизерно влияли на показания в 3-й плате (если я правильно понял озвученный тобою алгоритм) и вообще не влияли на 1и2-й плате. Вот о чём я, чем больше пытаюсь объясниться словами- тем больше сам запутываюсь. И ещё мне жаль, что ушёл из обсуждения ув.AlexCrane. Спасибо!
Labu559, Василий, ты подал не в том порядке - сверху младшие, снизу старшие...