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

 
 
> Простой вопрос по языку C
Igor3
сообщение May 31 2007, 09:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 12-05-06
Пользователь №: 17 021



Занимаюсь модификацией имеющегося исходника на PICС(HI-TECH) под другую периферийную микросхему, управляемую PIC-ом по последовательному трёхпроводному порту. Эта другая периферийная микросхема имеет другую, более сложную организацию адресного пространства контрольных регистров.
В оригинале все 10 bit целой, unsigned переменной загружаются PIC-ом разом в один регистр периферийной микросхемы. А мне нужно эту переменную разбить на три части и загрузить в разные банки, кусками по 2 bit, 4 bit, 4 bit. Как загрузить мне понятно, а как выдернуть из переменной отдельные биты не знаю.
Т.к. программированием никогда не занимался и только вчера скачал книгу Карнигана 07.gif , прошу подсказки в виде пары-тройки строк примера. Надеюсь понятно объяснил свою проблему. 05.gif
Помогите, пожалуйста. Заранее спасибо! beer.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
spf
сообщение May 31 2007, 09:46
Сообщение #2


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Цитата(Igor3 @ May 31 2007, 15:17) *
В оригинале все 10 bit целой, unsigned переменной загружаются PIC-ом разом в один регистр периферийной микросхемы. А мне нужно эту переменную разбить на три части и загрузить в разные банки, кусками по 2 bit, 4 bit, 4 bit. Как загрузить мне понятно, а как выдернуть из переменной отдельные биты не знаю.

Если нужные биты идут попорядку, то достаточно воспользоваться сдвигом и маскированием
Код
int test; // исходный, порядок расположения секций в нем  2-4-4
int test4_1; // первая секция из 4 бит
int test4_2; // вторая секция из 4 бит
int test2_1; // секция из 2 бит

test4_1 = test & 0x0f; // маскировать лишнее
test4_2 = (test >>4) & 0x0f; // сдвинуть на  4 бита и маскировать лишнее
test2_1 = (test >>8) & 0x03; // сдвинуть на  8 бит и маскировать лишнее


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 1 2007, 06:42
Сообщение #3


Гуру
******

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



Цитата(spf @ May 31 2007, 12:46) *
Код
int test4-1;
Только замените "-"на "_".


--------------------
На любой вопрос даю любой ответ
"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



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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 00:22
Рейтинг@Mail.ru


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