Перейти к содержанию
    

бинарная форма представления в Keil

Привет всем.

Подскажите как правильно инициализировать переменную в бинорном виде в Keil.

unsigned char data = '0b00001111' что-то вроде этого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Написать 256 раз

#define 0b00001111 0x0F

В стандарте Си "бинарного вида" не предусмотрено.

 

А вообще, это либо пишется как 0x0F, и конвертируется в голове, либо как

#define BIT(n) (1UL<<(n))

data = BIT(3) | BIT(2) | BIT(1) | BIT(0);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

В MPLAB, к примеру, допустимо делать так:

unsigned char www = 0b00000101;

 

IAR на подобные записи выдает ошибку,

а AVRSTUDIO6 нет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поверьте, запись числа в бинарном виде - запись "ни о чем"

Гораздо информативнее, как сказал esaulenka, запись вида BIT(x)

Потому что, сидя с даташитом в руках, гораздо проще разбираться, какие там флаги проверяются или биты устанавливаются

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

IAR на подобные записи выдает ошибку, а AVRSTUDIO6 нет.
Студия (точнее, avr-gcc), начал такое воспринимать после долгих плачей в подержке «а вот кто-то там такое умеет».

 

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

 

«Присоединяясь к предыдущим ораторам», регистры периферии нужно заполнять именованными константами, а всякие там шрифты — генерировать из более приличного визуального представления.

Писал уже когда-то, что форма

0b00011000,
0b00100100,
0b01000010,

мало помогает даже для шрифта, который для ускорения вывода хочется в памяти хранить зеркально и повёрнутым на 90°. А если ещё и хочется хранить сначала первые строки всех символов, потом все вторые, ..., то никакого счастья от 0b нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

/* Макро для использования двоичного формата чисел */
#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)

Последнее использую именно для создания шрифта. У меня каждый пиксел представлен двумя битами. Вполне доволен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если ещё и хочется хранить сначала первые строки всех символов, потом все вторые, ...,

Вопрос не в тему: а с чем связано такое желание?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...