Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.10.2016, 22:06   #1
stD
Moderator
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,103
Вес репутации: 1283
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Побитовый сдвиг - что я делаю не так

Мне нужно отправить от одной ардуины в другую число
PHP код:
unsigned long hot_water 161959
разбив его на четыре байта.

Разбиваю так:

PHP код:
...
array_out[10] = hot_water 0xFF
array_out[11] = (hot_water 0xFF00) >> 8;  
array_out[12] = (hot_water 0xFF0000) >> 16
array_out[13] = (hot_water 0xFF000000) >> 24;
... 

На другом конце собираю так:

PHP код:
...
hot_wat array_out[13]; 
hot_wat = (hot_wat << 24) | array_out[12]; 
hot_wat = (hot_wat << 16) | array_out[11];  
hot_wat = (hot_wat << 8) | array_out[10];
... 
Однако вместо 161959 получаю нелепое число, типа - 33585319. Подскажите, что не так?

П.С. Если через эту конструкцию отправлять двухбайтное число (uint16_t), то всё ОК, а вот 4-х байтное не прокатывает.
__________________
istarik.ru

Последний раз редактировалось stD; 30.10.2016 в 22:11.
stD вне форума   Ответить с цитированием
Старый 30.10.2016, 23:14   #2
Alex19279
Senior Member
 
Регистрация: 20.09.2014
Сообщений: 145
Вес репутации: 158
Alex19279 will become famous soon enough
По умолчанию Re: Побитовый сдвиг - что я делаю не так

Можт после каждой команды разбора на байты поставить команды вывода значений в терминалку? глянуть что приходит и что уходит.
Alex19279 вне форума   Ответить с цитированием
Старый 31.10.2016, 00:54   #3
stD
Moderator
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,103
Вес репутации: 1283
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Побитовый сдвиг - что я делаю не так

Я уже всё в одной программе сделал:

PHP код:
...
unsigned long hot_water 161959;
...
array_out[10] = hot_water 0xFF
array_out[11] = (hot_water 0xFF00) >> 8;  
array_out[12] = (hot_water 0xFF0000) >> 16
array_out[13] = (hot_water 0xFF000000) >> 24;


Serial.println("aray.");
Serial.println(array_out[10]);
Serial.println(array_out[11]);
Serial.println(array_out[12]);
Serial.println(array_out[13]);


hot_wat array_out[13]; 
hot_wat = (hot_wat << 24) | array_out[12]; 
hot_wat = (hot_wat << 16) | array_out[11];  
hot_wat = (hot_wat << 8) | array_out[10];


Serial.print("hot_wat:");
Serial.println(hot_wat); 

В терминале пишет:

PHP код:
aray.
167
120
2
0
hot_wat
:33585319 
Что думаете?
__________________
istarik.ru
stD вне форума   Ответить с цитированием
Старый 31.10.2016, 01:20   #4
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,346
Вес репутации: 9545
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Побитовый сдвиг - что я делаю не так

Насколько я помню сначала нужно двигать на восемь бит вправо и только потом на младший байт накладывать маску
Как то так
Код:
array_out[10] = hot_water & 0xFF;  
array_out[11] = (hot_water >> 8) & 0xFF;
Admin вне форума   Ответить с цитированием
Старый 31.10.2016, 01:31   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,346
Вес репутации: 9545
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Побитовый сдвиг - что я делаю не так

Хотя посмотрел внимательней, этот способ тоже годится
Код:
data & 0xFF
(data & 0xFF00) >> 8
(data & 0xFF0000) >> 16
(data & 0xFF000000) >> 24
Admin вне форума   Ответить с цитированием
Старый 31.10.2016, 01:36   #6
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,346
Вес репутации: 9545
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Побитовый сдвиг - что я делаю не так

Вот так будет правильно
PHP код:
hot_wat array_out[13];  
hot_wat = (hot_wat << 8) | array_out[12];  
hot_wat = (hot_wat << 8) | array_out[11];   
hot_wat = (hot_wat << 8) | array_out[10]; 
Admin вне форума   Ответить с цитированием
Старый 31.10.2016, 02:40   #7
stD
Moderator
 
Аватар для stD
 
Регистрация: 02.04.2012
Адрес: Питер
Сообщений: 1,103
Вес репутации: 1283
stD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant futurestD has a brilliant future
По умолчанию Re: Побитовый сдвиг - что я делаю не так

Благодарствую.
__________________
istarik.ru
stD вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 07:56. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика