|
Что означает этот код? |
|
|
|
Mar 8 2014, 15:05
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401

|
Здравствуйте уважаемые форумчане. Возник вопрос при оптимизации кода. Было Код data[0] = w1_receive_byte();//читаем два байта с температурой data[1] = w1_receive_byte(); //загоняем в двух байтную переменную temp = data[1]; temp = temp<<8; temp |= data[0]; Подсказали что лучше использовать такое выражение Код *((char *)&Temp;) = w1_receive_byte(); *((char *)&Temp; + 1) = w1_receive_byte(); Вот никак не могу понять смысла этого кода. Я так понимаю что * и & это операции над указателями , а () приведение к типу но.... Вообщем если не трудно объясните начинающему подробно смысл сей конструкции.
|
|
|
|
|
 |
Ответов
|
Mar 9 2014, 11:21
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Господа программисты, особенно начинающие, обратите серьезное внимание на решение от Ксении. Хватит уже думать на уровне инструкций, переходите на уровень управления данными! union и struct позволяют сделать код в разы "читабельней" и "управляемей". Завтра вместо DS18B20 возьмете DS1820 и будете по всему коду искать сдвиги и прогие логические операции?! Код uint16_t temp_18b20() { union { unsigned char byte[2]; uint16_t word; struct { uint16_t ds18b20_f:4; uint16_t ds18b20_i:8; }; struct { uint16_t ds1820_f:1; uint16_t ds1820_i:8; }; struct { uint16_t ds_uni_f:N // ваше число бит для дробной части uint16_t ds_uni_i:8; // целая часть температуры } } temp;
... temp.byte[1] = TD_receive_byte(); temp.byte[0] = TD_receive_byte(); ... return temp.ds_uni_i; } Меняете в одном месте N и все!
|
|
|
|
|
Mar 9 2014, 11:26
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(adnega @ Mar 9 2014, 15:21)  union и struct позволяют сделать код в разы "читабельней" и "управляемей". Сильно поспорю. Читаемее то, для прочтения чего не надо искать хидер, где описан юнион, читать и разбирать этот хидер, и возвращаться к исходнику с использованием юнита (а без этого подумается, что тут просто запись в структуру, не юнион). Прямое средство запутывания следов. А прямая запись по указателю, как раз, сразу читается, без поиска концов по хидерам.
|
|
|
|
Сообщений в этой теме
RW6MKA Что означает этот код? Mar 8 2014, 15:05 _Артём_ Цитата(RW6MKA @ Mar 8 2014, 19:05) Код *... Mar 8 2014, 15:15 RW6MKA А более подробно можно. Конкретно по каждому знаку... Mar 8 2014, 15:29 _Артём_ Цитата(RW6MKA @ Mar 8 2014, 19:29) А боле... Mar 8 2014, 15:37  RW6MKA Цитата(_Артём_ @ Mar 8 2014, 19:37) Берёт... Mar 8 2014, 15:58   Harvester Цитата(RW6MKA @ Mar 8 2014, 19:58) Вот эт... Mar 8 2014, 16:25    RW6MKA Цитата(Harvester @ Mar 8 2014, 20:25) Ука... Mar 9 2014, 03:47     aaarrr Цитата(RW6MKA @ Mar 9 2014, 07:47) То ест... Mar 9 2014, 04:09      RW6MKA Цитата(aaarrr @ Mar 9 2014, 08:09) По при... Mar 9 2014, 07:11 aaarrr Цитата(RW6MKA @ Mar 8 2014, 19:05) Подска... Mar 8 2014, 15:36 RW6MKA Ну вроде экономия памяти при компиляции. Можно кон... Mar 8 2014, 15:54 aaarrr * - указатель
Без лишней памяти лучше будет напис... Mar 8 2014, 15:57 Harvester Ужас какой-то. Это как раз тот случай, когда досто... Mar 8 2014, 16:01 SSerge Цитата(Harvester @ Mar 8 2014, 23:01) Ужа... Mar 8 2014, 16:33 aaarrr Цитата(RW6MKA @ Mar 8 2014, 19:58) Вот эт... Mar 8 2014, 16:02 RW6MKA Цитата(aaarrr @ Mar 8 2014, 20:02) Есть т... Mar 8 2014, 16:13 aaarrr Обычно из таких - низкоуровневых - функций данные ... Mar 9 2014, 07:30 RW6MKA Цитата(aaarrr @ Mar 9 2014, 11:30) Обычно... Mar 9 2014, 08:20  aaarrr Цитата(RW6MKA @ Mar 9 2014, 12:20) Какой ... Mar 9 2014, 08:28  SM Цитата(RW6MKA @ Mar 9 2014, 12:20) от -4... Mar 9 2014, 08:32 RW6MKA Во общем из советов я прихожу к выводу, что float ... Mar 9 2014, 08:56 aaarrr Могут. На 8-16 битных архитектурах ничем не отлича... Mar 9 2014, 09:13 RW6MKA Понятно. Тогда с учетом того, что я пишу код в AVR... Mar 9 2014, 09:35 aaarrr Правильнее будет int16_t, а не uint - результат ве... Mar 9 2014, 09:38 SM Цитата(aaarrr @ Mar 9 2014, 13:38) Правил... Mar 9 2014, 09:44 RW6MKA Цитата(aaarrr @ Mar 9 2014, 13:38) Правил... Mar 9 2014, 09:48  aaarrr Цитата(RW6MKA @ Mar 9 2014, 13:48) Нет, з... Mar 9 2014, 10:06   RW6MKA Цитата(aaarrr @ Mar 9 2014, 14:06) Но есл... Mar 9 2014, 10:15 Xenia Судя по стартовому посту темы, вопрос касался опти... Mar 9 2014, 10:34 SM Цитата(Xenia @ Mar 9 2014, 14:34) т.е. ст... Mar 9 2014, 10:41  Xenia Цитата(SM @ Mar 9 2014, 14:41) Вот это, к... Mar 9 2014, 10:49   SM Цитата(Xenia @ Mar 9 2014, 14:49) Но тогд... Mar 9 2014, 11:07 aaarrr Цитата(Xenia @ Mar 9 2014, 14:34) Судя по... Mar 9 2014, 10:46  _Артём_ Цитата(aaarrr @ Mar 9 2014, 14:46) Во-пер... Mar 9 2014, 10:50   aaarrr Цитата(_Артём_ @ Mar 9 2014, 14:50) В 21 ... Mar 9 2014, 10:58    _Артём_ Цитата(aaarrr @ Mar 9 2014, 14:58) У Вас ... Mar 9 2014, 11:08     SM Цитата(_Артём_ @ Mar 9 2014, 15:08) что M... Mar 9 2014, 11:11 RW6MKA Уважаемые форумчане, перестаньте в присутствии нов... Mar 9 2014, 12:21 aaarrr Не обращайте внимания, день сегодня такой... выход... Mar 9 2014, 12:26
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|