LexRoss 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба Подскажите, что значит строка 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 6 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба Переменной command присваивается значение, скомпилированное из значений различных ячеек массива RC5_buffer путём сдвигов и операций ИЛИ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LexRoss 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба Я правильно понял, что RC5_buffer [8] << 5 означает запись в 5 бит command 8-ой ячейки массива? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба Я правильно понял, что RC5_buffer [8] << 5 означает запись в 5 бит command 8-ой ячейки массива? Нет, вы поняли неправильно.Это означает сдвиг вправо на 5 позиция значения RC5_buffer [8]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба Я правильно понял, что 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 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба Немного офтопа. Чтобы было понятне нужно писать нагляднее. К примеру так: 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; Неуважение какое-то к себе и остальным.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба Чтобы было понятне нужно писать нагляднее. К примеру...А если command определена как volatile? :laughing: Вполне логичная и понятная запись выражения. </offtopic> http://ru.wikipedia.org/wiki/Логический_сдвиг http://ru.wikipedia.org/wiki/Логическое_ИЛИ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
baralgin 0 21 ноября, 2009 Опубликовано 21 ноября, 2009 · Жалоба 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); :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба можно немного "перефразировать" конструкцию: 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 1 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба P.S. По поводу использования codevision avr много было замечаний. Лучше использовать компилятор соответствующий стандарту языка. Это замечание тут ни к чему. Только "понты" с Вашей стороны. Подобную строку можно написать при работе хоть с WinAVR, хоть с IAR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба Это замечание тут ни к чему. Только "понты" с Вашей стороны. Подобную строку можно написать при работе хоть с WinAVR, хоть с IAR. Сравните соответствие стандарту С99, а потом, пожалуйста, употребляйте "понты" и другие выражения. На эту тему на форуме полно информации, потрудитесь хотя бы прочитать то, что есть в обсуждениях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба Сравните соответствие стандарту С99, а потом, пожалуйста, употребляйте "понты" и другие выражения. На эту тему на форуме полно информации, потрудитесь хотя бы прочитать то, что есть в обсуждениях. Ну давайте сравним.Вы первый начали -вы и ходите первым.Выкатывайте ваши претензии к компилятору... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба :bb-offtopic: 2 WHALE. Я не собираюсь заниматься религиозными войнами. Поиск по форуму дает пищу для размышлений, особенно если писать реентабельный код: пример 1 пример 2 пример 3 Судя по форуму, Вам нравится Codevision и Вы им умеете пользоваться. Пользователь должен знать, а лучше понимать, ограничения используемого инструмента. В разделе для начинающих, на мой взгляд, подобное предупреждение вполне уместно. Вопросы сравнения в данном разделе некорректены Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба 2 WHALE. Я не собираюсь заниматься религиозными войнами. Поиск по форуму дает пищу для размышлений, особенно если писать реентабельный код: Ок, религиозная война отменяется.Возражать по вашим ссылкам не буду,скажу в общем-это не аргументы. Частично устарело,частично не соответсвует действительности. И должен заметить,что топик стартер не спрашивал,какой инструмент ему применить,он его уже применяет. Так что ваше замечание,с которого началось, как минимум было оффтопитоком.Но на этом ша... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 24 ноября, 2009 Опубликовано 24 ноября, 2009 · Жалоба Сравните соответствие стандарту С99, а потом, пожалуйста, употребляйте "понты" и другие выражения. На эту тему на форуме полно информации, потрудитесь хотя бы прочитать то, что есть в обсуждениях. Вы меня не так поняли. При чем тут стандарт С99? Хотите сказать что строку, приведенную топик-стартером нельзя написать в WinAVR или IAR? Можно! И следовательно к CodeVisionAVR совершенно никаких претензий, тема называется "Что означает строка...", т.е. без привязки к компилятору. Насчет инструмента автор не спрашивал, и сообщать что "CVAVR говно" тут не к месту, каждый волен сам решать чем ему пользоваться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться