TU-104 0 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Чего хочу в итоге: Используя описание пинов в таком виде #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 Как побороть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kabdim 0 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Если всегда использовать только так, то можно костылем: #define __bitH(port, bit) (port & (1 << bit)) #define _bitH(M) __bitH(M) #define A13 1,3 uint8_t A = _bitH(A13); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TU-104 0 3 июля, 2018 Опубликовано 3 июля, 2018 · Жалоба Если всегда использовать только так, то можно костылем: #define __bitH(port, bit) (port & (1 << bit)) #define _bitH(M) __bitH(M) #define A13 1,3 uint8_t A = _bitH(A13); МАГИЯ! заработало)) Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 10 июля, 2018 Опубликовано 10 июля, 2018 · Жалоба Как побороть? Я все пины описываю так (первое значение - порт, второе - пин): #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 В чём проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TU-104 0 17 июля, 2018 Опубликовано 17 июля, 2018 · Жалоба Я все пины описываю так (первое значение - порт, второе - пин): В чём проблема? А я разве не так? Третья строчка моего сообщения #define PIN_LED_G PIOC, PIO_PC23 Описал же проблему: макрос вида SET_BIT(PORT, BIT) (PORT & (1 << BIT)) ожидает 2 параметра, на что и ругается препроцессорв ИАРе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 17 июля, 2018 Опубликовано 17 июля, 2018 · Жалоба А я разве не так? Третья строчка моего сообщения #define PIN_LED_G PIOC, PIO_PC23 Описал же проблему: макрос вида SET_BIT(PORT, BIT) (PORT & (1 << BIT)) ожидает 2 параметра, на что и ругается препроцессорв ИАРе Может PORT или BIT уже где-то определены (внутри-иаровски или в системных макросах). Попробуйте PORT_A BIT_A. Да и SET_BIT тоже может где-то "наложилось" ps на крайний случай используйте ## для "сборки" требуемого оператора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 197 17 июля, 2018 Опубликовано 17 июля, 2018 · Жалоба Описал же проблему: макрос вида 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
TU-104 0 17 июля, 2018 Опубликовано 17 июля, 2018 (изменено) · Жалоба А я Вам и решение показал, только Вы не поняли.... Так ведь Kabdim дал во втором посте то же самое :laughing: Может PORT или BIT уже где-то определены (внутри-иаровски или в системных макросах). Нет, это я уже в сообщении написал, когда отвечал jcxz. А в коде у меня: port, bit, __bitH() Всем спасибо за помощь. Изменено 17 июля, 2018 пользователем TU-104 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться