Я получил синтаксическую ошибку при попытке скомпилировать этот макрос. Я должен использовать макрос, так как 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)
Спасибо вам всем! :)
P.S.: Я пытался ответить на этот вопрос, чтобы закрыть его, но не смог сделать это раньше, чем через 8 часов после публикации. Итак, я просто положил ответ здесь.