尝试编译此宏时出现语法错误。我必须使用宏,因为 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小时之前我无法做到。所以,我只是把答案放在这里。