Вопрос новичка по функции #define

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

Приведен кусок файла *.h :
define u8 unsigned char // 0 to 255
#define s8 signed char // -128 to 127

#define u16 unsigned int // 0 to 65535
#define s16 signed int // -32768 to 32767

#define u32 unsigned long int // 0 to 4294967295
#define s32 signed long int // -2147483648 to 2147483647

#define f32 float // ±1.175e-38 to ±3.402e38
#define d32 double // ±1.175e-38 to ±3.402e38

/*
Type Size (Bits) Range from CodeVisionAVR help
bit 1 0 , 1
char 8 -128 to 127
unsigned char 8 0 to 255
signed char 8 -128 to 127
int 16 -32768 to 32767
short int 16 -32768 to 32767
unsigned int 16 0 to 65535
signed int 16 -32768 to 32767
long int 32 -2147483648 to 2147483647
unsigned long int 32 0 to 4294967295
signed long int 32 -2147483648 to 2147483647
float 32 ±1.175e-38 to ±3.402e38
double 32 ±1.175e-38 to ±3.402e38
*/

///////////////////////////////////////////////

#ifdef _MEGA8_INCLUDED_


/* 2 wire serial interface */

#define TWPS1 1
#define TWPS0 0

#define TWINT 7
#define TWEA 6
#define TWSTA 5
#define TWSTO 4
#define TWWC 3
#define TWEN 2
#define TWIE 0
#define TWGCE 0


Вопрос вот в чем: к примеру взять строчку #define TWEA 6

По даташиту понятно что написав в исходнике на С слово TWEA компиллятор найдет его в файле *.h и установит бит 6 в регистре TWCR в единицу, ПОЧЕМУ ВМЕСТО указания что в шестой бит надо установить единицу стоит просто цифра 6 ?????
Трудно быть деревянным, совсем трудно....
Реклама
Прорезались зубы
Сообщения: 225
Зарегистрирован: Пн июл 23, 2007 03:10:34
Откуда: СПб

Сообщение L29Ah »

Ээээ... Это вопрос про директиву "#define" или про неведомый даташит и непонятную прогу?
Ꙑ!
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

Это вопрос про директиву, и это не кусок исходника, а кусок хидера.

Мне просто не совсем понятно как эта функция в данном случае делает подстановку определений пользователя.

Каким образом функция осуществляет все вышесказанное просто по цифре 6. Где это в хидере прописано???

Даташит очень даже ведомый по меге 8 скачанный с сайта Atmel.com
Трудно быть деревянным, совсем трудно....
Прорезались зубы
Сообщения: 225
Зарегистрирован: Пн июл 23, 2007 03:10:34
Откуда: СПб

Сообщение L29Ah »

Он того, что ты сказал, не делает.

Директива препроцессора "#define ляляля люлюлю ухуху" всего-лишь сообщает препроцессору, что в исходник перед компиляцией вместо "ляляля" нужно подставить "люлюлю ухуху". Всё.
Ꙑ!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

megasvintus писал(а):По даташиту понятно что написав в исходнике на С слово TWEA компиллятор найдет его в файле *.h и установит бит 6 в регистре TWCR в единицу, ПОЧЕМУ ВМЕСТО указания что в шестой бит надо установить единицу стоит просто цифра 6 ?????
ни какой бит не установится. просто в тексте программы препроцессор компиятра заменит TWCR на цифру 6.

смотри стр. 5 "Си для МК" под кнопкой Изображение ниже.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow

Сообщение Mozart »

я внесу свою лепту ибо он не установит 6ой бит а просто запишет число 6 в регистр а вот чтобы установить именно 6ой бит надо...

Код: Выделить всё

#include <...>
#define SIX_BIT    6
#define MASK_SIX_BIT   (1 << SIX_BIT)

int main()
{
     int a = 0;
     a |=  (1 << SIX_BIT);  //set six bit
     a &= ~(1 << SIX_BIT); // clear six bit
//or...
     a |= MASK_SIX_BIT;
     a &= ~MASK_SIX_BIT; 

     return 0;
}
з.ы. вот и всё... читайте книги по Си они иногда помогают
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Контактная информация:
Реклама
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Mozart писал(а): он не установит 6-ой бит а просто запишет число 6 в регистр
Чепуха ! Выше уже ДВА раза написано как ПРАВИЛЬНО !
Mozart писал(а):читайте книги по Си они иногда помогают
Читайте книги !
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 413
Зарегистрирован: Пт мар 10, 2006 12:23:05
Откуда: Moscow

Сообщение Mozart »

если число 6 или 0x06 или 0x6 представить в бинарном виде то получим 0b00000110 и вот это вото он запишет в регистр))) :)) и где тут позвольте у вас узнать бит номер 6???
Последний раз редактировалось Mozart Сб июн 28, 2008 11:13:47, всего редактировалось 1 раз.
если после прочитанной книги что-то в голове осталось, радуйся. Голова работает на тебя!!!
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Mozart писал(а):ржунимагу...
Действительно ЖЖЖЕШЬ не подетски ! Есть над чем поржать.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»