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

 
 
 
Reply to this topicStart new topic
> бинарная форма представления в Keil
skyv
сообщение Jul 27 2012, 11:05
Сообщение #1


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

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606



Привет всем.
Подскажите как правильно инициализировать переменную в бинорном виде в Keil.
unsigned char data = '0b00001111' что-то вроде этого.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jul 27 2012, 11:20
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Написать 256 раз
#define 0b00001111 0x0F
В стандарте Си "бинарного вида" не предусмотрено.

А вообще, это либо пишется как 0x0F, и конвертируется в голове, либо как
#define BIT(n) (1UL<<(n))
data = BIT(3) | BIT(2) | BIT(1) | BIT(0);


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
skyv
сообщение Jul 27 2012, 12:24
Сообщение #3


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

Группа: Участник
Сообщений: 181
Регистрация: 26-07-10
Пользователь №: 58 606




В MPLAB, к примеру, допустимо делать так:
unsigned char www = 0b00000101;

IAR на подобные записи выдает ошибку,
а AVRSTUDIO6 нет.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 28 2012, 06:07
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Поверьте, запись числа в бинарном виде - запись "ни о чем"
Гораздо информативнее, как сказал esaulenka, запись вида BIT(x)
Потому что, сидя с даташитом в руках, гораздо проще разбираться, какие там флаги проверяются или биты устанавливаются
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 28 2012, 06:32
Сообщение #5


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(skyv @ Jul 27 2012, 15:24) *
IAR на подобные записи выдает ошибку, а AVRSTUDIO6 нет.
Студия (точнее, avr-gcc), начал такое воспринимать после долгих плачей в подержке «а вот кто-то там такое умеет».

А вообще -- не понимаю желания иметь такую возможность. «Когда-то давно»™ сам сгенерировал h-файл с #define, но через неделю вытер.

«Присоединяясь к предыдущим ораторам», регистры периферии нужно заполнять именованными константами, а всякие там шрифты — генерировать из более приличного визуального представления.
Писал уже когда-то, что форма
Код
0b00011000,
0b00100100,
0b01000010,
мало помогает даже для шрифта, который для ускорения вывода хочется в памяти хранить зеркально и повёрнутым на 90°. А если ещё и хочется хранить сначала первые строки всех символов, потом все вторые, ..., то никакого счастья от 0b нет.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 28 2012, 15:54
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Код
/* Макро для использования двоичного формата чисел */
#define _BITSET(bits) \
  ((uint16_t) ( \
  (bits % 010) | \
  (bits / 010 % 010) << 1 | \
  (bits / 0100 % 010) << 2 | \
  (bits / 01000 % 010) << 3 | \
  (bits / 010000 % 010) << 4 | \
  (bits / 0100000 % 010) << 5 | \
  (bits / 01000000 % 010) << 6 | \
  (bits / 010000000 % 010) << 7 | \
  (bits / 0100000000 % 010) << 8 | \
  (bits / 01000000000 % 010) << 9 | \
  (bits / 010000000000 % 010) << 10 | \
  (bits / 0100000000000 % 010) << 11 | \
  (bits / 01000000000000 % 010) << 12 | \
  (bits / 010000000000000 % 010) << 13 | \
  (bits / 0100000000000000 % 010) << 14 | \
  (bits / 01000000000000000 % 010) << 15))
#define BIN(bits) _BITSET(0##bits)

/* Макро для использования четверичного формата чисел */
#define _PAIRSET(digits) \
  ((uint16_t) ( \
  (digits % 010) | \
  (digits / 010 % 010) << 2 | \
  (digits / 0100 % 010) << 4 | \
  (digits / 01000 % 010) << 6 | \
  (digits / 010000 % 010) << 8 | \
  (digits / 0100000 % 010) << 10 | \
  (digits / 01000000 % 010) << 12 | \
  (digits / 010000000 % 010) << 14))
#define QUAD(digits) _PAIRSET(0##digits)

Последнее использую именно для создания шрифта. У меня каждый пиксел представлен двумя битами. Вполне доволен.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jul 30 2012, 08:59
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(ReAl @ Jul 28 2012, 10:32) *
А если ещё и хочется хранить сначала первые строки всех символов, потом все вторые, ...,

Вопрос не в тему: а с чем связано такое желание?
Это оптимизация под 8-бит арифметику, чтобы индексы поменьше были?


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

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

 


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


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