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

 
 
 
Reply to this topicStart new topic
> Циклический сдвиг через флаг переноса в Си
condor
сообщение Jun 19 2005, 15:53
Сообщение #1


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

Группа: Свой
Сообщений: 93
Регистрация: 18-06-05
Из: Kyiv, Ukraine
Пользователь №: 6 126



Можно как-то в IAR'e организовать сабж без ассемблерных вставок?
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 19 2005, 18:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(condor @ Jun 19 2005, 21:53)
Можно как-то в IAR'e организовать сабж без ассемблерных вставок?
*

Не понял. Вы про IAR конкретно или про C-компилятор вообще? И для чего нужно сдвигать через флаг переноса? Обозначьте цель понятнее.
Go to the top of the page
 
+Quote Post
condor
сообщение Jun 19 2005, 21:13
Сообщение #3


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

Группа: Свой
Сообщений: 93
Регистрация: 18-06-05
Из: Kyiv, Ukraine
Пользователь №: 6 126



Цитата(rezident @ Jun 19 2005, 21:22)
Не понял. Вы про IAR конкретно или про C-компилятор вообще? И для чего нужно сдвигать через флаг переноса? Обозначьте цель понятнее.
*


Конкретно в IAR.
Надо биты с одного байта копировать в другой. Количество перемещаемых бит и их позиции в байтах могут быть произвольными.

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

Если есть лучшие решения, подскажите.
Go to the top of the page
 
+Quote Post
NoName
сообщение Jun 20 2005, 08:24
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 4-03-05
Из: Киев
Пользователь №: 3 078



Должно работать:
Byte_Source - источник
Byte_Maska - позиции битов которые необходимо перенести
Byte_Relise - получатель
Код
 Byte_Relise = (Byte_Source&(Byte_Maska))|(Byte_Relise&(~Byte_Maska));

если правильно понял идею.
// ---------------------------------
если положено описывать принцип то:
(Byte_Relise&(~Byte_Maska) - уст. в 0 переносимые биты приемника
(Byte_Source&(Byte_Maska)) - убираем информацию о лишних битах
и далее в Byte_Relise устанвливаем в 1 биты по маске из Byte_Source
Go to the top of the page
 
+Quote Post
condor
сообщение Jun 20 2005, 09:05
Сообщение #5


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

Группа: Свой
Сообщений: 93
Регистрация: 18-06-05
Из: Kyiv, Ukraine
Пользователь №: 6 126



Цитата(NoName @ Jun 20 2005, 11:24)
Должно работать:
Byte_Source - источник
Byte_Maska - позиции битов которые необходимо перенести
Byte_Relise - получатель
Код
 Byte_Relise = (Byte_Source&(Byte_Maska))|(Byte_Relise&(~Byte_Maska));

если правильно понял идею.
// ---------------------------------
если положено описывать принцип то:
(Byte_Relise&(~Byte_Maska) - уст. в  0 переносимые биты приемника
(Byte_Source&(Byte_Maska)) - убираем информацию о лишних битах
и далее в Byte_Relise устанвливаем в 1 биты по маске из Byte_Source
*


Это немножно не то что я хотел.
Например надо 0..2 биты одного байта, скопировать в 3..5 биты другого.
Go to the top of the page
 
+Quote Post
vet
сообщение Jun 20 2005, 09:07
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



byte2 = byte2 & 0xC7 | (byte1 & 0x07) << 3;


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
NoName
сообщение Jun 20 2005, 12:43
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 4-03-05
Из: Киев
Пользователь №: 3 078



для универсальности прийдется вызывать побитово smile.gif, а то вдруг потребуется 3бит в 5ый и 8бит в 4ый, направления сдвига уже сам придумаеш smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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