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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Чот означает строка..., CodeVisionAVR
LexRoss
сообщение Nov 21 2009, 16:05
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202



Подскажите, что значит строка
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)
Go to the top of the page
 
+Quote Post
Herz
сообщение Nov 21 2009, 16:31
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Переменной command присваивается значение, скомпилированное из значений различных ячеек массива RC5_buffer путём сдвигов и операций ИЛИ.
Go to the top of the page
 
+Quote Post
LexRoss
сообщение Nov 21 2009, 16:59
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 377
Регистрация: 31-01-09
Пользователь №: 44 202



Я правильно понял, что RC5_buffer [8] << 5 означает запись в 5 бит command 8-ой ячейки массива?
Go to the top of the page
 
+Quote Post
WHALE
сообщение Nov 21 2009, 17:08
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(LexRoss @ Nov 21 2009, 19:59) *
Я правильно понял, что RC5_buffer [8] << 5 означает запись в 5 бит command 8-ой ячейки массива?

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


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 21 2009, 17:12
Сообщение #5


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(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 опередил.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
baralgin
сообщение Nov 21 2009, 17:19
Сообщение #6


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

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



Немного офтопа. Чтобы было понятне нужно писать нагляднее. К примеру так:
Код
    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;

Неуважение какое-то к себе и остальным..
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 21 2009, 22:31
Сообщение #7


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



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

http://ru.wikipedia.org/wiki/Логический_сдвиг
http://ru.wikipedia.org/wiki/Логическое_ИЛИ
Go to the top of the page
 
+Quote Post
baralgin
сообщение Nov 21 2009, 22:55
Сообщение #8


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

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



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
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 23 2009, 00:20
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(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)
         ;
Так легче править - можно добавить/удалить/закомментировать любую строчку со сдвигом.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mrKirill
сообщение Nov 23 2009, 04:52
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



Цитата(mdmitry @ Nov 21 2009, 22:12) *
P.S. По поводу использования codevision avr много было замечаний. Лучше использовать компилятор соответствующий стандарту языка.

Это замечание тут ни к чему. Только "понты" с Вашей стороны.
Подобную строку можно написать при работе хоть с WinAVR, хоть с IAR.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 23 2009, 12:59
Сообщение #11


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



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

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


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
WHALE
сообщение Nov 23 2009, 16:05
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



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

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


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 23 2009, 17:39
Сообщение #13


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



bb-offtopic.gif
2 WHALE. Я не собираюсь заниматься религиозными войнами. Поиск по форуму дает пищу для размышлений, особенно если писать реентабельный код:
пример 1
пример 2
пример 3
Судя по форуму, Вам нравится Codevision и Вы им умеете пользоваться.
Пользователь должен знать, а лучше понимать, ограничения используемого инструмента. В разделе для начинающих, на мой взгляд, подобное предупреждение вполне уместно.
Вопросы сравнения в данном разделе некорректены


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
WHALE
сообщение Nov 23 2009, 18:54
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(mdmitry @ Nov 23 2009, 20:39) *
2 WHALE. Я не собираюсь заниматься религиозными войнами. Поиск по форуму дает пищу для размышлений, особенно если писать реентабельный код:

Ок, религиозная война отменяется.Возражать по вашим ссылкам не буду,скажу в общем-это не аргументы.
Частично устарело,частично не соответсвует действительности.
И должен заметить,что топик стартер не спрашивал,какой инструмент ему применить,он его уже применяет.
Так что ваше замечание,с которого началось, как минимум было оффтопитоком.Но на этом ша...
Причина редактирования: Излишнее цитирование.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
mrKirill
сообщение Nov 24 2009, 03:19
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



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

Вы меня не так поняли. При чем тут стандарт С99?
Хотите сказать что строку, приведенную топик-стартером нельзя написать в WinAVR или IAR?
Можно! И следовательно к CodeVisionAVR совершенно никаких претензий, тема называется "Что означает строка...", т.е. без привязки к компилятору.
Насчет инструмента автор не спрашивал, и сообщать что "CVAVR говно" тут не к месту, каждый волен сам решать чем ему пользоваться.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:52
Рейтинг@Mail.ru


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