Синтаксическая ошибка макроса C (компилятор C18)
Я получил синтаксическую ошибку при попытке скомпилировать этот макрос. Я должен использовать макрос, так как C18 не поддерживает встраивание функций. Использование обычного вызова функции приведет к тому, что компилятор будет иметь гораздо большие накладные расходы ISR (обычно это около 10 инструкций по сборке, при вызове функции он становится равным 50).
Я проверил, нет пробелов.
#define INCREMENT_IDX(puIdx,uMax) uMax--;\
if (*puIdx <= uMax)\
{\
(*puIdx)++;\
if (*puIdx > uMax)\
{\
*puIdx = 0;\
}\
}\
else\
{\
return(FALSE);\
}\
return(TRUE);
И компилятор вызвал синтаксическую ошибку, когда я вызываю макрос:
unsigned char uIndex;
INCREMENT_IDX(&uIndex, MAX_QUEUE_SIZE)
Спасибо.
Неважно, я нашел ответ. Проблема в том, что я использую другой макрос в качестве "входного параметра" при "вызове" макроса. Поскольку это макрос, это просто замена, поэтому внутренняя / временная переменная не создается.
Итак, я исправил это, выполнив это:
unsigned char uIndex, uMax = MAX_QUEUE_SIZE;
INCREMENT_IDX(&uIndex, uMax)
Спасибо вам всем!:)
PS: я пытался ответить на этот квест, чтобы закрыть его, но я не мог сделать это до 8 часов публикации. Итак, я просто положил ответ здесь.
1 ответ
Неважно, я нашел ответ. Проблема в том, что я использую другой макрос в качестве "входного параметра" при "вызове" макроса. Поскольку это макрос, это просто замена, поэтому внутренняя / временная переменная не создается.
Итак, я исправил это, выполнив это:
unsigned char uIndex, uMax = MAX_QUEUE_SIZE;
INCREMENT_IDX(&uIndex, uMax)
Спасибо вам всем!:)