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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> KEIL, двоичная форма записи
viael
сообщение Aug 17 2006, 21:26
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Чето я туплю млин...
Какой префикс в кейле для записи двоичных чисел, а в хелпе не нахожу blink.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 17 2006, 22:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(viael @ Aug 18 2006, 00:26) *
Какой префикс

В "C" не предусмотрено использование двоичных форматов, что в принципе правильно, поскольку достаточно тяжело для глаз. Для наглядности удобнее, например, дефинировать BIT0....BIT63
и писать в стиле BIT1|BIT7|BIT12.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
viael
сообщение Aug 17 2006, 22:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Цитата(zltigo @ Aug 18 2006, 02:14) *
Цитата(viael @ Aug 18 2006, 00:26) *

Какой префикс

В "C" не предусмотрено использование двоичных форматов, что в принципе правильно, поскольку достаточно тяжело для глаз. Для наглядности удобнее, например, дефинировать BIT0....BIT63
и писать в стиле BIT1|BIT7|BIT12.

О... glare.gif
Привык что в CVAVR a=0b11011111;
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 17 2006, 23:27
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(viael @ Aug 18 2006, 01:43) *
Привык что в CVAVR a=0b11011111;

Ну так и выдерите из *.h дефиниции (не думаю, что там компилятор такое понимает)
или напишите сами
#define 0b00000000 0
#define 0b00000001 1
.....
#define 0b11111111 255

Но лучше не надо глаза ломать... Особенно для 32 бит
0b00001000000001000000000001000000
Про 64 вообще молчу :-)


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
viael
сообщение Aug 18 2006, 03:48
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 10-04-06
Из: Украина,Запорожье
Пользователь №: 15 979



Цитата(zltigo @ Aug 18 2006, 03:27) *
Цитата(viael @ Aug 18 2006, 01:43) *

Привык что в CVAVR a=0b11011111;

Ну так и выдерите из *.h дефиниции (не думаю, что там компилятор такое понимает)
или напишите сами
#define 0b00000000 0
#define 0b00000001 1
.....
#define 0b11111111 255

Но лучше не надо глаза ломать... Особенно для 32 бит
0b00001000000001000000000001000000
Про 64 вообще молчу :-)

Надо только для 8 бит.Очень удобно кодировать таблицу для семисегментных индикаторов. a14.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 18 2006, 03:59
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(viael @ Aug 18 2006, 09:48) *
Надо только для 8 бит.Очень удобно кодировать таблицу для семисегментных индикаторов. a14.gif


Обозначьте сегменты дефайнами
Код
#ifndef _I_SEG7_DEF_
  #define SEG7_A              0x01  //разряд соответствующий сегменту A
  #define SEG7_B              0x02  //разряд соответствующий сегменту B
  #define SEG7_C              0x04  //разряд соответствующий сегменту C
  #define SEG7_D              0x08  //разряд соответствующий сегменту D
  #define SEG7_E              0x10  //разряд соответствующий сегменту E
  #define SEG7_F              0x20  //разряд соответствующий сегменту F
  #define SEG7_G              0x40  //разряд соответствующий сегменту G
  #define SEG7_H              0x80  //разряд соответствующий сегменту H
  #define _I_SEG7_DEF_    1
#endif _I_SEG7_DEF_

и пишите строки вида

Код
const unsigned char seg7TabNum[]=
{
    SEG7_A+SEG7_B+SEG7_C+SEG7_D+SEG7_E+SEG7_F,    // 0
    SEG7_B+SEG7_C,                                // 1
    SEG7_A+SEG7_B+SEG7_G+SEG7_E+SEG7_D,           // 2
    SEG7_A+SEG7_B+SEG7_C+SEG7_D+SEG7_G,           // 3
    SEG7_F+SEG7_G+SEG7_B+SEG7_C,                  // 4
    SEG7_A+SEG7_F+SEG7_G+SEG7_C+SEG7_D,           // 5
    SEG7_A+SEG7_F+SEG7_E+SEG7_D+SEG7_C+SEG7_G,    // 6
    SEG7_A+SEG7_B+SEG7_C,                         // 7
    SEG7_A+SEG7_B+SEG7_C+SEG7_D+SEG7_E+SEG7_F+SEG7_G, // 8
    SEG7_A+SEG7_B+SEG7_C+SEG7_D+SEG7_F+SEG7_G    // 9
};

По-моему так гораздо понятнее и удобнее. Даже если индикатор перевернете вверх ногами, то достаточно будет поменять дефайны соответствия сегментов и пинов управления ими и не трогать таблицу.

Сообщение отредактировал rezident - Aug 18 2006, 04:01
Go to the top of the page
 
+Quote Post
VAI
сообщение Aug 18 2006, 06:50
Сообщение #7


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Автор, по моему, Аскольд Волков. Я немного дополнил до 16 бит, желающие могут дополнить и до 32-х :-)
Код
#define _bitset(bits)\
  ((unsigned int)(\
  (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 BINARY( bits ) _bitset(0##bits)

// использование
  P3DIR |= BINARY( 00001111 );
  а =   BINARY( 1010101000001111 );


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Halfback
сообщение Apr 3 2007, 21:59
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512



VAI
Keil пишет ошибку деления на нуль sad.gif
Go to the top of the page
 
+Quote Post
VAI
сообщение Apr 10 2007, 10:42
Сообщение #9


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

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



У меня для MSP, для ARM (в кейле), для Винды применяются эти макросы. проблем нет.
Приведите текст, где у Вас дает ошибку.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 10 2007, 10:53
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Halfback @ Apr 3 2007, 22:59) *
VAI
Keil пишет ошибку деления на нуль sad.gif


Переполнение не возникает? В Кейле размер инта какой? Попробуйте подправить макросы: вместо 010...0 везде сделать 010...0UL.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Apr 11 2007, 12:54
Сообщение #11


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(viael @ Aug 17 2006, 22:26) *
Чето я туплю млин...
Какой префикс в кейле для записи двоичных чисел, а в хелпе не нахожу blink.gif


для азма - как всегда..
на хвостике h - шестнадцатиричное значение...
на хвостике b - двоичное...


(круглый)
Go to the top of the page
 
+Quote Post
SiMM
сообщение Jun 26 2007, 07:07
Сообщение #12





Группа: Новичок
Сообщений: 5
Регистрация: 8-07-05
Пользователь №: 6 631



Цитата(Halfback @ Apr 4 2007, 01:59) *
VAI
Keil пишет ошибку деления на нуль sad.gif
Если заменить операции деления и взятия модуля числа на более подходящие, получим макрос, работающий при любых условиях:
Код
#define BINARY(bits)\
  ((unsigned int)(\
  (0##bits&7)|\
  ((0##bits>>3)&7)<<1|\
  ((0##bits>>6)&7)<<2|\
  ((0##bits>>9)&7)<<3|\
  ((0##bits>>12)&7)<<4|\
  ((0##bits>>15)&7)<<5|\
  ((0##bits>>18)&7)<<6|\
  ((0##bits>>21)&7)<<7|\
  ((0##bits>>24)&7)<<8|\
  ((0##bits>>27)&7)<<9|\
  ((0##bits>>30)&7)<<10|\
  ((0##bits>>33)&7)<<11|\
  ((0##bits>>36)&7)<<12|\
  ((0##bits>>39)&7)<<13|\
  ((0##bits>>42)&7)<<14|\
  ((0##bits>>45)&7)<<15))
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Oct 31 2007, 16:59
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Раньше мой Programmers Notepad понимал запись
PORTB=0b00000001;
А теперь почему-то не понимает. Старые программы перестали компилироватся.

Так как записывать цифры по битам ?

Пробовал PN 2.0.5.18 , PN 2.0.6.1


Заранее благодарю.
С уважением, Михаил.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
Guest_=AVR=_*
сообщение Oct 31 2007, 17:11
Сообщение #14





Guests






Предлагаю выдать человеку Шнобелевскую премию за компиляцию посредством PN smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 31 2007, 17:16
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



В стандарте Си нет записи бинарных чисел. Эта видимо была особенность вашего конкретного компилятора, которую ликвидировали для лучшего соответствия его стандарту ANSI C.
Go to the top of the page
 
+Quote Post

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

 


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


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