Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Циклический сдвиг через флаг переноса в Си
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
condor
Можно как-то в IAR'e организовать сабж без ассемблерных вставок?
rezident
Цитата(condor @ Jun 19 2005, 21:53)
Можно как-то в IAR'e организовать сабж без ассемблерных вставок?
*

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


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

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

Если есть лучшие решения, подскажите.
NoName
Должно работать:
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
condor
Цитата(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 биты другого.
vet
byte2 = byte2 & 0xC7 | (byte1 & 0x07) << 3;
NoName
для универсальности прийдется вызывать побитово smile.gif, а то вдруг потребуется 3бит в 5ый и 8бит в 4ый, направления сдвига уже сам придумаеш smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.