skyvmicro 0 27 июля, 2012 Опубликовано 27 июля, 2012 · Жалоба Привет всем. Подскажите как правильно инициализировать переменную в бинорном виде в Keil. unsigned char data = '0b00001111' что-то вроде этого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 27 июля, 2012 Опубликовано 27 июля, 2012 · Жалоба Написать 256 раз #define 0b00001111 0x0F В стандарте Си "бинарного вида" не предусмотрено. А вообще, это либо пишется как 0x0F, и конвертируется в голове, либо как #define BIT(n) (1UL<<(n)) data = BIT(3) | BIT(2) | BIT(1) | BIT(0); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
skyvmicro 0 27 июля, 2012 Опубликовано 27 июля, 2012 · Жалоба В MPLAB, к примеру, допустимо делать так: unsigned char www = 0b00000101; IAR на подобные записи выдает ошибку, а AVRSTUDIO6 нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 28 июля, 2012 Опубликовано 28 июля, 2012 · Жалоба Поверьте, запись числа в бинарном виде - запись "ни о чем" Гораздо информативнее, как сказал esaulenka, запись вида BIT(x) Потому что, сидя с даташитом в руках, гораздо проще разбираться, какие там флаги проверяются или биты устанавливаются Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 28 июля, 2012 Опубликовано 28 июля, 2012 · Жалоба IAR на подобные записи выдает ошибку, а AVRSTUDIO6 нет.Студия (точнее, avr-gcc), начал такое воспринимать после долгих плачей в подержке «а вот кто-то там такое умеет». А вообще -- не понимаю желания иметь такую возможность. «Когда-то давно»™ сам сгенерировал h-файл с #define, но через неделю вытер. «Присоединяясь к предыдущим ораторам», регистры периферии нужно заполнять именованными константами, а всякие там шрифты — генерировать из более приличного визуального представления. Писал уже когда-то, что форма 0b00011000, 0b00100100, 0b01000010, мало помогает даже для шрифта, который для ускорения вывода хочется в памяти хранить зеркально и повёрнутым на 90°. А если ещё и хочется хранить сначала первые строки всех символов, потом все вторые, ..., то никакого счастья от 0b нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 28 июля, 2012 Опубликовано 28 июля, 2012 · Жалоба /* Макро для использования двоичного формата чисел */ #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 7 30 июля, 2012 Опубликовано 30 июля, 2012 · Жалоба А если ещё и хочется хранить сначала первые строки всех символов, потом все вторые, ..., Вопрос не в тему: а с чем связано такое желание? Это оптимизация под 8-бит арифметику, чтобы индексы поменьше были? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться