Для удобства работы с портами ввода/вывода (на STM32 в Keil) написал небольшой хидер, приведу его часть :
Код
#define SbitP(Port,Nbit) GPIO##Port->BSRR=GPIO_BSRR_BS##Nbit
#define RbitP(Port,Nbit) GPIO##Port->BSRR=GPIO_BSRR_BR##Nbit
#define SmbitP(Port,mask) GPIO##Port->BSRR=(mask)
#define RmbitP(Port,mask) GPIO##Port->BSRR=(mask)<<16
в программе использую следующие варианты включения макросов:
Код
#define LCD_dataShift 1
void LCD_wrAdr (u8 Adr)
{
SmbitP(A,((Adr&0x0f)<<LCD_dataShift)); // выставляем на шину адрес
RbitP(A,7); // вкл. на запись адреса A0=0
SbitP(A,5); // вкл.строба записи
delay(2000);// Задержка ~ 100нс
RbitP(A,5); // снимаем строб записи
RmbitP(A,(0x0f<<LCD_dataShift)); // Сброс битов шины DBх
delay(5000);// Задержка ~ 200нс
}
У меня вопрос: на сколько корректно такое применение макросов ? т.к. в случае с RbitP(A,7) в макрос подставляется символ , который при обединение с остальным текстом сам является библиотечным макросом. Т.е. до каких пор происходит раскрытие макроса ?