Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смысловое значение кода программы 
V
    Опции темы
shinoby
Дата 26.11.2011, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Попросили нарисовать блок-схемы для программы предназначенной для прибора, однако столкнулся с проблемой понимания нескольких строчек кода. Надеюсь вы мне поможете понять, что они означают (могут означать).

1-ая:   s=s>>1

2-ая: PORTB=PORTB|s  или PORTB=des|s   (что дает вертикальная линия?)
PM MAIL   Вверх
Twelves
Дата 26.11.2011, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 22.6.2011

Репутация: нет
Всего: нет



1) Это побитовый сдвиг влево. все биты числа сдвигаются в данном случае на один влево, при этом младший теряется.
т.е если у тебя есть число 7 и ты напишешь 7 >> 1, то у тебя получится число 3 (семь в двоичном представлении 111 - сдвигаем, получаем - 011)

2) Одна | вертикальная черта - это побитовое ИЛИ. К соответствующим битам двух чисел применяется операция ИЛИ. и получается результат.
например: результат 4 | 2 это 6 (100 | 10 = 110)

Это сообщение отредактировал(а) Twelves - 26.11.2011, 19:04
PM MAIL   Вверх
shinoby
Дата 26.11.2011, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Цитата(Twelves @ 26.11.2011,  19:04)
1) Это побитовый сдвиг влево. все биты числа сдвигаются в данном случае на один влево, при этом младший теряется.
т.е если у тебя есть число 7 и ты напишешь 7 >> 1, то у тебя получится число 3 (семь в двоичном представлении 111 - сдвигаем, получаем - 011)

2) Одна | вертикальная черта - это побитовое ИЛИ. К соответствующим битам двух чисел применяется операция ИЛИ. и получается результат.
например: результат 4 | 2 это 6 (100 | 10 = 110)

В принципе я тоже так предполагал, единственное, что меня смущало, да и сейчас смущает это то, что я вижу замкнутый цикл из которого нет выхода.
Ниже привожу отрывок кода:
Код

if (nakop<=255){
PORTD.5=1;}
else {
stop:PORTD.5=0;
nakop=0;
PORTA=0;
ed=9;
des=9;
sot=9;
tis=9;
PORTB=ed;
s=0b10000000;
PORTB=PORTB|s;
delay_ms(1);
if (s!=0b00010000)
{s=s>>1;
PORTB=des|s;
delay_ms(1);
s=s>>1;
PORTB=sot|s;
delay_ms(1);
s=s>>1;
PORTB=tis|s;
delay_ms(1);
s=s>>1;
}
goto stop;}


PM MAIL   Вверх
Dem_max
Дата 27.11.2011, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



ну а почему он не может быть ?


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
drug007
Дата 28.11.2011, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 3.11.2011

Репутация: нет
Всего: 1



Дело в том, что речь идет о программе для встроенного устройства, которое работает без какой-либо ОС. Грубо говоря, когда включается устройство, сразу начинает работать данная программа, без загрузки какого-либо другого софта. Если не будет постоянного цикла, то программа выполнится один раз и прибор перестанет работать. А в цикле он будет работать пока вы его не выключите. А так как программа единолично распоряжается работой прибора, ей не надо согласовывать свою работу с другими программами, поэтому цикл без выхода простое и даже элегантное решение. Это обычная организация выполнения кода во встраиваемых(embedded) приложениях.
PM MAIL   Вверх
fish9370
Дата 28.11.2011, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 663
Регистрация: 15.4.2007
Где: Москва

Репутация: -1
Всего: 1



Цитата(shinoby @  26.11.2011,  17:59 Найти цитируемый пост)
1-ая:   s=s>>1

Цитата(Twelves @  26.11.2011,  19:04 Найти цитируемый пост)
Это побитовый сдвиг влево


вобще-то это сдвиг вправо  smile 

а прогу писал извращенец


--------------------
undefined
PM MAIL WWW ICQ   Вверх
Twelves
Дата 28.11.2011, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 22.6.2011

Репутация: нет
Всего: нет



Цитата(fish9370 @ 28.11.2011,  10:35)
Цитата(shinoby @  26.11.2011,  17:59 Найти цитируемый пост)
1-ая:   s=s>>1

Цитата(Twelves @  26.11.2011,  19:04 Найти цитируемый пост)
Это побитовый сдвиг влево


вобще-то это сдвиг вправо  smile 

а прогу писал извращенец

оу.  smile  описАлся, имел в виду именно вправо 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1191 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.