3 / 3 / 0
Регистрация: 02.03.2013
Сообщений: 56
|
|||||||||||
1 | |||||||||||
Создать структуру для работы с битами11.09.2014, 17:31. Показов 5498. Ответов 20
Метки нет (Все метки)
Всем добра
Есть такая проблемка, сейчас постараюсь описать её. Допустим есть целое число типа int. И пусть оно длиной 16 бит. в двоичном представлении оно наверяка будет выглядеть так (если оно равно 0) 0000 0000 0000 0000. биты нумерутся от 0 до 15 как сделать в С (именно С а не С++) структуру для работы с этими битами такого плана.
00111101 1 01 0 11 1 0 пробелами выделила Поля, первая цепочка цифр (00111101) это Поле1, вторая (1) - это Поле2 и т.д. Но если я не использую какие-нибудь поля, то на месте этих битов ничего не записывается догадываюсь, что надо использовать побитовые операции сдвига и прочие побитовые штуковины, но как реазлизовать такое - незнаю.. если кто сможет, то помогите пожалуйста
0
|
11.09.2014, 17:31 | |
Ответы с готовыми решениями:
20
Создать структуру для работы с квадратом Создать структуру для работы с массивом Создать структуру для работы с датой Создать структуру Money для работы с денежными суммами |
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
|
11.09.2014, 18:00 | 2 |
Мега Ксю, предлагаю заюзать битовые маски.
0
|
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
|
||||||
11.09.2014, 18:11 | 3 | |||||
Поддерживаю предыдущего оратора. А еще проще использовать нормальную структуру, примерно вот так:
0
|
76 / 36 / 17
Регистрация: 24.07.2014
Сообщений: 357
|
|
11.09.2014, 18:44 | 4 |
судя по тому что именно Си, задача наверное на микроконтроллер а он надорватся может.Мега Ксю, я правильно догадался?
0
|
3 / 3 / 0
Регистрация: 02.03.2013
Сообщений: 56
|
|
11.09.2014, 19:41 [ТС] | 5 |
тут как раз такой случай, когда может надорваться в моём распоряжении 16КБ (да да, именно Килобайта) оперативной памяти, это будет описание регистра для микроконроллера.
Справлюсь, да, вы абсолютно правы Добавлено через 1 минуту Andrej, а как их заюзать? можете примерчик бросить для моего случая?
0
|
И целого heap'а мало
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
|
|
11.09.2014, 19:59 | 6 |
Мега Ксю, http://www.rfe.by/media/kafedr... ija-18.pdf там Битовые поля структур.
Там говорится, можно заименовать последовательность бит в структуре (даже один нанобитик) и обращаться к ним. А битовые маски оказались немного из другой оперы. Не по теме: Понесло же вас в микроконтроллеры. :)
1
|
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
|
||||||
11.09.2014, 20:04 | 7 | |||||
Сообщение было отмечено Мега Ксю как решение
Решение
Мега Ксю, если возможно и поддерживается, то как вариант битовые поля и объединения.
1
|
3 / 3 / 0
Регистрация: 02.03.2013
Сообщений: 56
|
|||||||||||||||||||||||||||||||
11.09.2014, 23:53 [ТС] | 9 | ||||||||||||||||||||||||||||||
Вованя, спасибо большое
кто-нибудь может объяснить эти две строчки
точнее интересуют кусочки
насчёт этого,
Добавлено через 6 минут и ещё вопросик могу ли я как-нибудь обойтись без этой структуры?
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||
12.09.2014, 00:15 | 10 | |||||
сдвинуть 1 на i вправо и операция "И"
выделить i-тый бит например i=2 n=5(0000 0101) 1 << i(1 << 2)= 4(0000 0100) 5&4=4 (0000 0101&0000 0100=0000 00100) sizeof(short) размер short в байтах(обычно 2) CHAR_BIT количество бит в байте (обычно 8) итого sizeof(short)* CHAR_BIT=16 и (1 << i) сдвинет на 16 позиций, но нужно на 15(старший бит у short 15тый), посему и -1 Добавлено через 8 минут это не структура это объедение(union) т.е одно и тоже значение по определенному адресу можно считать и как short и как битовое поле например
1
|
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
|
||||||
12.09.2014, 00:18 | 11 | |||||
1
|
3 / 3 / 0
Регистрация: 02.03.2013
Сообщений: 56
|
|||||||||||
12.09.2014, 08:58 [ТС] | 12 | ||||||||||
ValeryS, спасибо большое!
Если я вас правильно поняла, то эта задача будет решена так
Vtulhu, я правильно поняла, что тип unsigned это бит? и если не сложно, то можете объяснить, что значат эти строчки?
Не по теме: а контроллер не будут загружать (в плане производительности) там всякие эти объединения? Добавлено через 2 минуты Не по теме: извиняюсь, что задаю слишком много вопросов, но я только начинаю программировать на C, и с такими низкоуровневыми штучками в первый раз столкнулась...
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|||||||||||
12.09.2014, 09:27 | 13 | ||||||||||
нет
вот так
т.е старший бит интерпретируется как знак (signed) или часть числа(unsigned) не будет когда программа скомпилится от всех этих объединений и следа не останется почитай что такое битовые операции "И", "ИЛИ", "НЕ", "ИСКЛЮЧАЮЩИЕ ИЛИ" без этого для микроконтроллеров трудно писать
1
|
3 / 3 / 0
Регистрация: 02.03.2013
Сообщений: 56
|
||||||||||||||||
15.09.2014, 08:06 [ТС] | 14 | |||||||||||||||
ValeryS, спасибо большое
если вы меня не побьёте, то можно ещё вопросик? вот если есть вот такое объединение
просто я эту тему начала по сути из-за такого вопроса, что хочу обращаться к регистрам следующие образом
Можно ли так сделать?
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
16.09.2014, 06:50 | 15 |
Нет
Для того чтобы к чему нибудь обратится нужно это что то иметь STRUCT это описание, и все а a это уже объект который имеет тип STRUCT Регистры это что? какая то абстракция или конкретные места в памяти если конкретные места, то пользуйся приведением типов посмотри исходники например для stm32f..... там этих приведений куча
0
|
3 / 3 / 0
Регистрация: 02.03.2013
Сообщений: 56
|
||||||
17.09.2014, 14:32 [ТС] | 16 | |||||
ну если пошли такие дела, то позволю себе ещё несколько вопросиков
вот так можно будет сделать?
хорошо я постараюсь посмотреть, если я сама смогу найти там эти привидения
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|||||||||||
18.09.2014, 09:13 | 17 | ||||||||||
если адрес известен то ничего сложного
при работе с контроллером, достаточно низкоуровневое программирование, нужно очень хорошо понимать его архитектуру и примочки, которые срабатываю на АВР, не сработают на АРМ
1
|
3 / 3 / 0
Регистрация: 02.03.2013
Сообщений: 56
|
||||||
22.09.2014, 22:57 [ТС] | 18 | |||||
ValeryS, извиняюсь, что долго не отвечала..
если я вас правильно поняла, то могу писать так
Не по теме: Работаю (точнее пытаюсь работать:gsmile: ) с отечественным контроллером К1986ВЕ91Т, это ARM-контроллер с ядром Cortex-M3
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
23.09.2014, 06:32 | 19 |
да
но с этим не вяжется у АРМов шаг обычно кратен четырем или 2 (тумп режим) никогда не сталкивался ничем не могу пока помочь дай ссылку на даташит, тогда поговорим поконкретней это белорусы?
1
|
3 / 3 / 0
Регистрация: 02.03.2013
Сообщений: 56
|
|||||||||||
23.09.2014, 10:58 [ТС] | 20 | ||||||||||
т.е. для arm-контроллера я так программировать не смогу?
http://milandr.ru/index.php?mact=Products,cntnt01,details,0&cntnt01productid=13&cntnt01returnid=68 она тут же, на официальном сайте http://milandr.ru/index.php?ma... eturnid=68 или вот прямая ссылка на него http://milandr.ru/uploads/Prod... 86BE9x.pdf нет, это г. Зеленоград, Россия Добавлено через 4 минуты и ещё, когда смотрела исходники всякие, то там использовалось просто union, вместо typedef union можете в двух словах сказать, в чем отличие этой записи
0
|
23.09.2014, 10:58 | |
23.09.2014, 10:58 | |
Помогаю со студенческими работами здесь
20
Создать структуру окружность и методы для работы с ней Создать структуру Абитуриент и написать программу для работы с ней Создать структуру, описывающую человека и класс для работы с данными о людях операции для работы с битами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |