Собственно, весь вопрос в заголовке темы. Помню фразы, что в C++ роль макроопределений много меньше, чем в C. Стало быть, надо ориентироваться на inline функции?
К примеру, задать бит в порту можно с одинаковым успехом обоими вариантами. Для единообразия пошел по второму:
Код
__forceinline void FpRq_off(void)
{
GPIOA->BSRR = FPRQ_H;
}
Но, скажем, функцию задержки, вычисляющую начальное значение счетчика в зависимости от времени, делаю комбинацией макрофункции со встроенной функцией.
Код
#define DELAY(VALUE, UNIT) \
DelayFourCycles(((VALUE) * UNIT * (SYSCLK / 1000000) + 3999) / 4000)
#pragma push
#pragma O3
__forceinline void DelayFourCycles(uint32_t FC)
{
__asm {
LOOP:
SUBS FC, FC, #1
BNE LOOP
}
}
#pragma pop
Хочу просветления. Или уже...?