Перейти к содержанию
    

Как правильно задефайнить (port,bit)

Чего хочу в итоге:

Используя описание пинов в таком виде

#define PIN_LED_G PIOC, PIO_PC23

хочу дергать ногами через дефайны, и что-то не получается.

АВР-студия на такое раньше не ругалась и все работало.

Теперь IAR-7.50.2, упростил к примеру уже до такого:

#define _bitH(port, bit) (port & (1 << bit))    
#define A13 1,3
_____
u8 A = _bitH(A13);

Ругается: Error[Pe054]: too few arguments in invocation of macro "_bitH" E:\work...main.c 338

 

Как побороть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если всегда использовать только так, то можно костылем:

#define __bitH(port, bit) (port & (1 << bit))
#define _bitH(M) __bitH(M)

#define A13 1,3
uint8_t A = _bitH(A13);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если всегда использовать только так, то можно костылем:

#define __bitH(port, bit) (port & (1 << bit))
#define _bitH(M) __bitH(M)

#define A13 1,3
uint8_t A = _bitH(A13);

МАГИЯ! заработало)) Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как побороть?

Я все пины описываю так (первое значение - порт, второе - пин):

#define PIN_MRAM_MOSI     2,  14 //SCLK для nUSIC_mram
#define PIN_MRAM_MISO     2,  15 //MOSI для nUSIC_mram
#define PIN_MRAM_SCLK     5,  8  //MISO для nUSIC_mram
#define PIN_MRAM_CS       5,  11 //CS для MR25H10 на nUSIC_mram

В чём проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я все пины описываю так (первое значение - порт, второе - пин):

В чём проблема?

А я разве не так? Третья строчка моего сообщения

#define PIN_LED_G PIOC, PIO_PC23

Описал же проблему: макрос вида SET_BIT(PORT, BIT) (PORT & (1 << BIT)) ожидает 2 параметра, на что и ругается препроцессорв ИАРе

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я разве не так? Третья строчка моего сообщения

#define PIN_LED_G PIOC, PIO_PC23

Описал же проблему: макрос вида SET_BIT(PORT, BIT) (PORT & (1 << BIT)) ожидает 2 параметра, на что и ругается препроцессорв ИАРе

Может PORT или BIT уже где-то определены (внутри-иаровски или в системных макросах).

Попробуйте PORT_A BIT_A. Да и SET_BIT тоже может где-то "наложилось"

ps

на крайний случай используйте ## для "сборки" требуемого оператора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Описал же проблему: макрос вида SET_BIT(PORT, BIT) (PORT & (1 << BIT)) ожидает 2 параметра, на что и ругается препроцессорв ИАРе

А я Вам и решение показал, только Вы не поняли....

#define Pset2(port, pin)    (GPIO[port].OMS = 1u << (pin))
#define Pset(port_pin)      Pset2(port_pin)
...
Pset(PIN_MRAM_CS);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я Вам и решение показал, только Вы не поняли....

Так ведь Kabdim дал во втором посте то же самое :laughing:

Может PORT или BIT уже где-то определены (внутри-иаровски или в системных макросах).

Нет, это я уже в сообщении написал, когда отвечал jcxz. А в коде у меня: port, bit, __bitH()

 

Всем спасибо за помощь.

Изменено пользователем TU-104

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...