Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чот означает строка...
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
LexRoss
Подскажите, что значит строка
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)
Herz
Переменной command присваивается значение, скомпилированное из значений различных ячеек массива RC5_buffer путём сдвигов и операций ИЛИ.
LexRoss
Я правильно понял, что RC5_buffer [8] << 5 означает запись в 5 бит command 8-ой ячейки массива?
WHALE
Цитата(LexRoss @ Nov 21 2009, 19:59) *
Я правильно понял, что RC5_buffer [8] << 5 означает запись в 5 бит command 8-ой ячейки массива?

Нет, вы поняли неправильно.Это означает сдвиг вправо на 5 позиция значения RC5_buffer [8].
mdmitry
Цитата(LexRoss @ Nov 21 2009, 19:59) *
Я правильно понял, что 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 опередил.
baralgin
Немного офтопа. Чтобы было понятне нужно писать нагляднее. К примеру так:
Код
    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;

Неуважение какое-то к себе и остальным..
SysRq
Цитата(baralgin @ Nov 21 2009, 20:19) *
Чтобы было понятне нужно писать нагляднее. К примеру...
А если command определена как volatile? laughing.gif
Вполне логичная и понятная запись выражения. </offtopic>

http://ru.wikipedia.org/wiki/Логический_сдвиг
http://ru.wikipedia.org/wiki/Логическое_ИЛИ
baralgin
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);

smile.gif
Сергей Борщ
Цитата(baralgin @ Nov 22 2009, 00:55) *
можно немного "перефразировать" конструкцию:

Код
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)
         ;
Так легче править - можно добавить/удалить/закомментировать любую строчку со сдвигом.
mrKirill
Цитата(mdmitry @ Nov 21 2009, 22:12) *
P.S. По поводу использования codevision avr много было замечаний. Лучше использовать компилятор соответствующий стандарту языка.

Это замечание тут ни к чему. Только "понты" с Вашей стороны.
Подобную строку можно написать при работе хоть с WinAVR, хоть с IAR.
mdmitry
Цитата(mrKirill @ Nov 23 2009, 07:52) *
Это замечание тут ни к чему. Только "понты" с Вашей стороны.
Подобную строку можно написать при работе хоть с WinAVR, хоть с IAR.

Сравните соответствие стандарту С99, а потом, пожалуйста, употребляйте "понты" и другие выражения. На эту тему на форуме полно информации, потрудитесь хотя бы прочитать то, что есть в обсуждениях.
WHALE
Цитата(mdmitry @ Nov 23 2009, 15:59) *
Сравните соответствие стандарту С99, а потом, пожалуйста, употребляйте "понты" и другие выражения. На эту тему на форуме полно информации, потрудитесь хотя бы прочитать то, что есть в обсуждениях.

Ну давайте сравним.Вы первый начали -вы и ходите первым.Выкатывайте ваши претензии к компилятору...
mdmitry
bb-offtopic.gif
2 WHALE. Я не собираюсь заниматься религиозными войнами. Поиск по форуму дает пищу для размышлений, особенно если писать реентабельный код:
пример 1
пример 2
пример 3
Судя по форуму, Вам нравится Codevision и Вы им умеете пользоваться.
Пользователь должен знать, а лучше понимать, ограничения используемого инструмента. В разделе для начинающих, на мой взгляд, подобное предупреждение вполне уместно.
Вопросы сравнения в данном разделе некорректены
WHALE
Цитата(mdmitry @ Nov 23 2009, 20:39) *
2 WHALE. Я не собираюсь заниматься религиозными войнами. Поиск по форуму дает пищу для размышлений, особенно если писать реентабельный код:

Ок, религиозная война отменяется.Возражать по вашим ссылкам не буду,скажу в общем-это не аргументы.
Частично устарело,частично не соответсвует действительности.
И должен заметить,что топик стартер не спрашивал,какой инструмент ему применить,он его уже применяет.
Так что ваше замечание,с которого началось, как минимум было оффтопитоком.Но на этом ша...
mrKirill
Цитата(mdmitry @ Nov 23 2009, 17:59) *
Сравните соответствие стандарту С99, а потом, пожалуйста, употребляйте "понты" и другие выражения. На эту тему на форуме полно информации, потрудитесь хотя бы прочитать то, что есть в обсуждениях.

Вы меня не так поняли. При чем тут стандарт С99?
Хотите сказать что строку, приведенную топик-стартером нельзя написать в WinAVR или IAR?
Можно! И следовательно к CodeVisionAVR совершенно никаких претензий, тема называется "Что означает строка...", т.е. без привязки к компилятору.
Насчет инструмента автор не спрашивал, и сообщать что "CVAVR говно" тут не к месту, каждый волен сам решать чем ему пользоваться.
mdmitry
Цитата(mrKirill @ Nov 24 2009, 06:19) *
Насчет инструмента автор не спрашивал, и сообщать что "CVAVR говно" тут не к месту, каждый волен сам решать чем ему пользоваться.

Выражения выбирайте и читайте внимательно посты.
В разделе для начинающих подсказать о потенциальных проблемах к месту. К сожалению, Ваше сообщение не может служить образцом корректности в качестве примера laughing.gif .
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.