Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: бинарная форма представления в Keil
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
skyv
Привет всем.
Подскажите как правильно инициализировать переменную в бинорном виде в Keil.
unsigned char data = '0b00001111' что-то вроде этого.
esaulenka
Написать 256 раз
#define 0b00001111 0x0F
В стандарте Си "бинарного вида" не предусмотрено.

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

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

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

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

«Присоединяясь к предыдущим ораторам», регистры периферии нужно заполнять именованными константами, а всякие там шрифты — генерировать из более приличного визуального представления.
Писал уже когда-то, что форма
Код
0b00011000,
0b00100100,
0b01000010,
мало помогает даже для шрифта, который для ускорения вывода хочется в памяти хранить зеркально и повёрнутым на 90°. А если ещё и хочется хранить сначала первые строки всех символов, потом все вторые, ..., то никакого счастья от 0b нет.
ViKo
Код
/* Макро для использования двоичного формата чисел */
#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)

Последнее использую именно для создания шрифта. У меня каждый пиксел представлен двумя битами. Вполне доволен.
esaulenka
Цитата(ReAl @ Jul 28 2012, 10:32) *
А если ещё и хочется хранить сначала первые строки всех символов, потом все вторые, ...,

Вопрос не в тему: а с чем связано такое желание?
Это оптимизация под 8-бит арифметику, чтобы индексы поменьше были?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.