Просмотр этой темы:
3 анонимных пользователей
1 2
Главный Технолог
Зарегистрирован:
01.07.2011 19:44 Из: Тольятти
Сообщений:
305
|
Спасибо огромное!!!)))
Отправлено: 06.07.2011 7:01
|
|
Главный Технолог
Зарегистрирован:
01.07.2011 19:44 Из: Тольятти
Сообщений:
305
|
Подскажите пожалуйста, что значит (1U<<num_bit)?
if(num_bit==16) { flag_res=1; addr=(unsigned char)(temp_data>>8); data=(unsigned char)temp_data; } Это значит, что когда все 16 чисел приняты, значит temp_data смещаем на 8 символов вправо, конвертируем ее в чар и засовываем в addr; а вот в data в без смещения. А у нас сначала приходит адрес, а потом данные. Значит наверное надо поменять местами?
Отправлено: 06.07.2011 7:16
|
|
Главный Технолог
Зарегистрирован:
01.07.2011 19:44 Из: Тольятти
Сообщений:
305
|
Еще один вопрос. А почему такая запись
temp_data=temp_data<<1; temp_data|=(1U<<num_bit); // ? ? а если так temp_data |= 0x01;
Отправлено: 06.07.2011 7:27
|
|
Главный Технолог
Зарегистрирован:
01.07.2011 19:44 Из: Тольятти
Сообщений:
305
|
И что такое 1U?
Отправлено: 06.07.2011 7:28
|
|
Модератор
Зарегистрирован:
26.01.2010 23:26 Из: Тирасполь
Сообщений:
3926
|
Да, Вы правы вместо строки
temp_data|=(1U<<num_bit); нужно temp_data |=0x01; У нас все приходящие биты засовываются влево. Самые первые у нас как раз и будут в старшем байте temp_data. 1U - это беззнаковая "1". Предпочитаю в явном виде указывать тип переменных, а не полагаться на настройки компилятора. А то сдвинет знаковую "1" - сиди и потом ищи глюки...
Отправлено: 06.07.2011 11:08
|
|
Модератор
Зарегистрирован:
26.01.2010 23:26 Из: Тирасполь
Сообщений:
3926
|
Немного подправил
Отправлено: 06.07.2011 11:20
|
|
Главный Технолог
Зарегистрирован:
01.07.2011 19:44 Из: Тольятти
Сообщений:
305
|
Все понял. Спасибо огромное!!!
Если будут вопросы напушу)))
Отправлено: 06.07.2011 14:59
|
|
1 2