Синтаксическая ошибка макроса 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)

Спасибо вам всем!:)

Другие вопросы по тегам