реклама на сайте
подробности

 
 
> Что означает этот код?
RW6MKA
сообщение Mar 8 2014, 15:05
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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();

Вот никак не могу понять смысла этого кода. Я так понимаю что * и & это операции над указателями , а () приведение к типу но....
Вообщем если не трудно объясните начинающему подробно смысл сей конструкции.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Mar 9 2014, 11:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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 и все!
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 9 2014, 11:26
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(adnega @ Mar 9 2014, 15:21) *
union и struct позволяют сделать код в разы "читабельней" и "управляемей".


Сильно поспорю. Читаемее то, для прочтения чего не надо искать хидер, где описан юнион, читать и разбирать этот хидер, и возвращаться к исходнику с использованием юнита (а без этого подумается, что тут просто запись в структуру, не юнион). Прямое средство запутывания следов. А прямая запись по указателю, как раз, сразу читается, без поиска концов по хидерам.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 9 2014, 11:30
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(SM @ Mar 9 2014, 15:26) *
Прямое средство запутывания следов.

Соглашусь полностью. Запутывание и загромождение.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016