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

 
 
> Макросы в C
amost
сообщение Jan 24 2010, 12:25
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 28-10-05
Из: Ukraine, Khmelnitsky
Пользователь №: 10 246



что-то запутался я со вложенными макросами. например есть макрос

Код
#define M_SCAN_INPUT(port, pin, pos, loc)    \
            loc |= ( ((port >> pin) & 0x01) << pos)

теперь хочу значения port, pin, pos спрятать еще в один дефайн :

Код
#define INPUT1    PORTD,2,0

что-бы в конечном итоге вызвать макрос таким образом :

Код
M_SCAN_INPUT(INPUT1, pin_state_cur);

как по мне то должно работать. выдает эррор несоответствия количества аргументов при вызове макроса.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
demiurg_spb
сообщение Jan 24 2010, 12:35
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Вам нужнен ещё один промежуточный макрос. Как то так:
Код
#define _PIN_SET(X,N)   do {PORT##X |= (1<<(N));} while (0)
#define _PIN_CLR(X,N)   do {PORT##X &= ~(1<<(N));} while (0)
#define _PIN_TEST(X,N)  (PORT##X & (1<<(N)))

#define PIN_SET(PIN)   _PIN_SET(PIN)
#define PIN_CLR(PIN)   _PIN_CLR(PIN)
#define PIN_TEST(PIN)  _PIN_TEST(PIN)
Используем:
Код
#define DF_CS   B,4
#define DF_READY   C,0

if (PIN_TEST(DF_READY))
{
    PIN_CLR(DF_CS);
    ...
}


http://electronix.ru/forum/lofiversion/index.php/t71157.html


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jan 25 2010, 14:31
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Нашёл ошибку в своём примере. Надо было так:
Код
#define _PIN_TEST(X,N)  (PIN##X & (1<<(N)))
У Вас тоже ошибка. Надо читать регистр порта PINX а не PORTX.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



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

 


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


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