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

 
 
3 страниц V  < 1 2 3  
Closed TopicStart new topic
> Что означает этот код?
aaarrr
сообщение Mar 9 2014, 10:46
Сообщение #31


Гуру
******

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



Цитата(Xenia @ Mar 9 2014, 14:34) *
Судя по стартовому посту темы, вопрос касался оптимизации кода, т.е. стремления избавиться от операции 8-кратного сдвига, который МК обычно не умеют делать одной инструкцией. А то и вызывают на этом месте библиотечную функцию, которая осуществялет сдвиги в цикле со счетчиком.

На 8? В 21-м веке? Со счетчиком? Не верю.


Цитата(Xenia @ Mar 9 2014, 14:34) *
Здесь union располагает в одной и той же памяти 2 байта byte и одно слово word, тем самым, позвояяя заполнить последнее по частям.

Во-первых, громоздко; во-вторых, что будем с эндианизьмом делать?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Mar 9 2014, 10:49
Сообщение #32


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(SM @ Mar 9 2014, 14:41) *
Вот это, как раз, большинство 8-разрядных МК делают одной командой с легкостью, так как 16-битные регистры образуются из пар 8-битных, и такой сдвиг оптимизируется в пересылку сразу в нужный регистр.


Всё это лишь надежда на то, что компилятор при оптимизации исправит наш дурацкий код. sm.gif Но тогда зачем такой код писать? Тогда как через union оно так красиво записывается, что глаз не оторвать! sm.gif
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 9 2014, 10:50
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(aaarrr @ Mar 9 2014, 14:46) *
Во-первых, громоздко; во-вторых, что будем с эндианизьмом делать?

А что, большие индейцы разве не вымерли?
В 21 веке только мелкие как правило попадаются...Или нет?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 9 2014, 10:58
Сообщение #34


Гуру
******

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



Цитата(_Артём_ @ Mar 9 2014, 14:50) *
В 21 веке только мелкие как правило попадаются...Или нет?

У Вас есть роутер?
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 9 2014, 11:07
Сообщение #35


Гуру
******

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



Цитата(Xenia @ Mar 9 2014, 14:49) *
Но тогда зачем такой код писать?

Если переменная находится именно в памяти, а не проходит процесс обработки, и не возвращается функцией, то такой код вполне оправдан... А иначе - наоборот, вреден, так как вынудит компилятор сначала записать в память, а потом из нее взять в регистры.

PS
А union мне не нравится, не люблю лишние сущности. Напрямую оно понятнее, так как сразу все видно и понятно, без заглядывания в описание юниона. Главное язык программирования знать, чтобы не смотреть на эту запись, как ТС в начале темы.

PPS
А с эндианизьмом - #ifdef ....
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 9 2014, 11:08
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(aaarrr @ Mar 9 2014, 14:58) *
У Вас есть роутер?

Нет, у меня нет роутера. Что это такое? sm.gif
Вы намекаете, что MIPS имеет big endian? Не знал...
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 9 2014, 11:11
Сообщение #37


Гуру
******

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



Цитата(_Артём_ @ Mar 9 2014, 15:08) *
что MIPS имеет big endian? Не знал...


А еще многие имеют программируемый endian. Например TI C6000, да и АРМы тоже не все little, особенно из кортексов-А
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 9 2014, 11:21
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #40


Гуру
******

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



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

Соглашусь полностью. Запутывание и загромождение.
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Mar 9 2014, 12:21
Сообщение #41


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

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Уважаемые форумчане, перестаньте в присутствии новичка ругаться непонятными терминами и спорить biggrin.gif . Вопроса про оптимизацию кода я не ставил, как я уже писал, места мне вполне хватает. Я просил объяснить кусок кода и мне таки его объяснили. Возник вопрос о правильности применения того или иного типа переменной и функции и мне опять таки вежливо и подробно все объяснили. За что всем огромное спасибо. Что касается
Цитата
Хватит уже думать на уровне инструкций, переходите на уровень управления данными!
Вы извините, я не программист и не собираюсь им становиться, это просто увлечение на уровне не особо сложных полезных поделок с простенькими МК. Так что не спорьте между собой что лучше и как лучше, просто по возможности объясняйте таким новичкам как я что нам не понятно и мы будем вам очень благодарны a14.gif

Сообщение отредактировал RW6MKA - Mar 9 2014, 12:21
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 9 2014, 12:26
Сообщение #42


Гуру
******

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



Не обращайте внимания, день сегодня такой... выходной. Вот народ и спорит от скуки sm.gif
Go to the top of the page
 
+Quote Post

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

 


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


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