Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вопрос про define и ##
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
_Diman_
Код
#define DB4        0    //указать номер вывода
#define PORT_DB4    B    //указать  порт вывода

#define SET_PORT_1(port, bit) (PORT##port |= _BV(bit))
#define SET_PORT_0(port, bit) (PORT##port &= ~_BV(bit))
#define SET_DDR_1(port, bit) (DDR##port |= _BV(bit))
#define SET_DDR_0(port, bit) (DDR##port &= ~_BV(bit))

#define DB4_1    SET_PORT_1(PORT_DB4,DB4)
#define DB4_0    SET_PORT_0(PORT_DB4,DB4)


Не получается так. Склеивается как PORTPORT_DB4. Как сделать что бы PORT_DB4 заменялся на В при вызове макроса?
Хочется в начале файла указать вывод и порт и пользоваться DB4_1 вместо SET_PORT_1(В,DB4).
SergeyTT
это Whenever?

А если сделать вот так:

CODE
#define DB4 0 //указать номер вывода
#define PORT_DB4 B //указать порт вывода

//#define SET_PORT_1(port, bit) (PORT##port |= _BV(bit))
#define SET_PORT_BIT(port, bit) (port |= _BV(bit))

//#define SET_PORT_0(port, bit) (PORT##port &= ~_BV(bit))
#define CLEAR_PORT_BIT(port, bit) (port &= ~_BV(bit))


//#define SET_DDR_1(port, bit) (DDR##port |= _BV(bit))
#define SET_DDR_BIT(port, bit) (port |= _BV(bit))

//#define SET_DDR_0(port, bit) (DDR##port &= ~_BV(bit))
#define CLEAR_DDR_BIT(port, bit) (port &= ~_BV(bit))


#define DB4_1 SET_PORT_BIT(B,DB4)
#define DB4_0 CLEAR_PORT_BIT(B4,DB4)

.........
DB4_1;
DB4_0;
.........


и клея не надо.
Только кривовато все это выглядывает...
MrYuran
Код
#define DB4        0    //указать номер вывода
#define PORT_DB4    PORTB    //указать  порт вывода

#define SET_PORT_1(port, bit) (port |= (1<<bit))
#define SET_PORT_0(port, bit) (port &= (1<<bit))
_Diman_
Понятно, так я раньше делал.
Здесь же хотел что бы одним define убить всех зайцев
Код
#define SET_PORT_1(port, bit) (PORT##port |= _BV(bit))
#define SET_PORT_0(port, bit) (PORT##port &= ~_BV(bit))
#define SET_DDR_1(port, bit) (DDR##port |= _BV(bit))
#define SET_DDR_0(port, bit) (DDR##port &= ~_BV(bit))
#define TEST_PIN(port, bit) (PIN##port & _BV(bit))

#define DB4_1        SET_PORT_1( PORT_DB4 ,DB4)
#define DB4_0        SET_PORT_0( PORT_DB4 ,DB4)
#define DDR_DB4_1    SET_DDR_1(PORT_DB4,DB4)
#define DDR_DB4_0    SET_DDR_0(PORT_DB4,DB4)
#define PIN_DB4        TEST_PIN(PORT_DB4,DB4)


Ну, вообщем не писать это
#define DB4 0 //указать номер вывода
#define PORT_DB4 PORTB //указать порт вывода
#define DDR_DB4 DDRB
#define PIN_DB4 PINB
Сергей Борщ
Цитата(_Diman_ @ Feb 6 2009, 22:46) *
Здесь же хотел что бы одним define убить всех зайцев
Посмотрите тут. Нужен еще один уровень вложенности define. Препроцессор работает в два прохода. Подробности можно почитать в описании ГНУтого препроцессора.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.