Перейти к содержанию
    

Чот означает строка...

Подскажите, что значит строка

command = (RC5_buffer [8] << 5)|(RC5_buffer [9] << 4)|(RC5_buffer [10] << 3 )|(RC5_buffer [11] << 2)|(RC5_buffer [12] << 1)|RC5_buffer [13];

(компилятор codevisionavr)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переменной command присваивается значение, скомпилированное из значений различных ячеек массива RC5_buffer путём сдвигов и операций ИЛИ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я правильно понял, что RC5_buffer [8] << 5 означает запись в 5 бит command 8-ой ячейки массива?

Нет, вы поняли неправильно.Это означает сдвиг вправо на 5 позиция значения RC5_buffer [8].

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я правильно понял, что RC5_buffer [8] << 5 означает запись в 5 бит command 8-ой ячейки массива?

Нет.

Это означает: взять 8 элемент массива

RC5_buffer

(индекс начинается с 0) и сдвинуть его содержимое на 5 бит налево, т.е умножить на 2^5. Это стандартные операторы языка С.

(RC5_buffer [8] << 5)|(RC5_buffer [9] << 4)|(RC5_buffer [10] << 3 )|(RC5_buffer [11] << 2)|(RC5_buffer [12] << 1)|RC5_buffer [13]

С остальными элементами массива аналогично. Затем все результаты сдвигов подвергаются операции побитного логического ИЛИ.

P.S. По поводу использования codevision avr много было замечаний. Лучше использовать компилятор соответствующий стандарту языка.

WHALE опередил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Немного офтопа. Чтобы было понятне нужно писать нагляднее. К примеру так:

    command  = RC5_buffer[13] << 0;
    command |= RC5_buffer[12] << 1;
    command |= RC5_buffer[11] << 2;
    command |= RC5_buffer[10] << 3;
    command |= RC5_buffer [9] << 4;
    command |= RC5_buffer [8] << 5;

Неуважение какое-то к себе и остальным..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чтобы было понятне нужно писать нагляднее. К примеру...
А если command определена как volatile? :laughing:

Вполне логичная и понятная запись выражения. </offtopic>

 

http://ru.wikipedia.org/wiki/Логический_сдвиг

http://ru.wikipedia.org/wiki/Логическое_ИЛИ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SysRq Ну чтобы не уповать на оптимизации компилятора, можно немного "перефразировать" конструкцию:

command = (RC5_buffer[13] << 0) |
          (RC5_buffer[12] << 1) |
          (RC5_buffer[11] << 2) |
          (RC5_buffer[10] << 3) |
          (RC5_buffer [9] << 4) |
          (RC5_buffer [8] << 5);

:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно немного "перефразировать" конструкцию:

command = 0
          | (RC5_buffer[13] << 0)
          | (RC5_buffer[12] << 1)
          | (RC5_buffer[11] << 2)
          | (RC5_buffer[10] << 3)
          | (RC5_buffer [9] << 4)
          | (RC5_buffer [8] << 5)
         ;

Так легче править - можно добавить/удалить/закомментировать любую строчку со сдвигом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

P.S. По поводу использования codevision avr много было замечаний. Лучше использовать компилятор соответствующий стандарту языка.

Это замечание тут ни к чему. Только "понты" с Вашей стороны.

Подобную строку можно написать при работе хоть с WinAVR, хоть с IAR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это замечание тут ни к чему. Только "понты" с Вашей стороны.

Подобную строку можно написать при работе хоть с WinAVR, хоть с IAR.

Сравните соответствие стандарту С99, а потом, пожалуйста, употребляйте "понты" и другие выражения. На эту тему на форуме полно информации, потрудитесь хотя бы прочитать то, что есть в обсуждениях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сравните соответствие стандарту С99, а потом, пожалуйста, употребляйте "понты" и другие выражения. На эту тему на форуме полно информации, потрудитесь хотя бы прочитать то, что есть в обсуждениях.

Ну давайте сравним.Вы первый начали -вы и ходите первым.Выкатывайте ваши претензии к компилятору...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:bb-offtopic:

2 WHALE. Я не собираюсь заниматься религиозными войнами. Поиск по форуму дает пищу для размышлений, особенно если писать реентабельный код:

пример 1

пример 2

пример 3

Судя по форуму, Вам нравится Codevision и Вы им умеете пользоваться.

Пользователь должен знать, а лучше понимать, ограничения используемого инструмента. В разделе для начинающих, на мой взгляд, подобное предупреждение вполне уместно.

Вопросы сравнения в данном разделе некорректены

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 WHALE. Я не собираюсь заниматься религиозными войнами. Поиск по форуму дает пищу для размышлений, особенно если писать реентабельный код:

Ок, религиозная война отменяется.Возражать по вашим ссылкам не буду,скажу в общем-это не аргументы.

Частично устарело,частично не соответсвует действительности.

И должен заметить,что топик стартер не спрашивал,какой инструмент ему применить,он его уже применяет.

Так что ваше замечание,с которого началось, как минимум было оффтопитоком.Но на этом ша...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сравните соответствие стандарту С99, а потом, пожалуйста, употребляйте "понты" и другие выражения. На эту тему на форуме полно информации, потрудитесь хотя бы прочитать то, что есть в обсуждениях.

Вы меня не так поняли. При чем тут стандарт С99?

Хотите сказать что строку, приведенную топик-стартером нельзя написать в WinAVR или IAR?

Можно! И следовательно к CodeVisionAVR совершенно никаких претензий, тема называется "Что означает строка...", т.е. без привязки к компилятору.

Насчет инструмента автор не спрашивал, и сообщать что "CVAVR говно" тут не к месту, каждый волен сам решать чем ему пользоваться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...