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

 
 
 
Reply to this topicStart new topic
> двоичное представление числа с IAR AVR
allmaker
сообщение Mar 22 2012, 14:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 18-10-06
Пользователь №: 21 440



Есть кусок кода, содержащий массив знакогенератора из пары тысяч констант вида 0bxxxxxxxx, который надо портировать в мой проект на С в IAR AVR.
const u8 font[][6] = {
{ // ' '
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
},{ // '!'
0b00000000,
0b00000000,
0b11111010,
0b00000000,
0b00000000,
0b00000000,
...

Насколько я понимаю двочное представление чисел IARу чуждо.
Чую, что есть адеккватное решение.
Помогите плз.
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Mar 22 2012, 14:23
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Оно чуждо не IAR а языку С и C++.
Я бы делал так:
Все это содержание перегнал бы в обычный бинарник, создвл бы специальную секцию во флеш, прилинковал бы туда этот бинарник.


Второй вариант сделать 256 дефайнов вида
Цитата
#define 0b00000000 0x0
#define 0b00000001 0x1
#define 0b00000010 0x2
...
#define 0b11111111 0xFF


Возможно уже есть готовый такой файл поищите по форуму.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Mar 22 2012, 14:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



или, как вариант обрежьте 0 перед b, напишите 256 #define в нормальные числа и оно будет транслироваться.
Пока писал уже предложили. Только 0 все равно нужно отрезать.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 22 2012, 14:32
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(allmaker @ Mar 22 2012, 16:06) *
Насколько я понимаю двочное представление чисел IARу чуждо.


Чуждо.
Напишите утилиту которая конвертирует ваши 0b100000 в 0xXX.
Это не сложно.
Go to the top of the page
 
+Quote Post
Nixon
сообщение Mar 22 2012, 14:41
Сообщение #5


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Вопрос поднимается с завидной регулярностью. Хоть в шапку выноси.
http://bytes.com/topic/c/answers/216333-bi...constant-macros
или
http://electronix.ru/forum/index.php?showt...4&hl=BINARY


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 22 2012, 21:46
Сообщение #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

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:39
Рейтинг@Mail.ru


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