[英]Comma in a macro to pass arguments to a another macro function ( #define a,b )
我正在使用CodeVision对AVR微控制器进行编程。 它是一个C编译器。
所以这是给我一个错误的部分
#defined some_name PORTL,6
SETBIT ( some_name );
错误是:宏调用中的参数太少
根据CodeVision对该宏的定义是:可以使用以下宏:
SETBIT(port,b)
sets bit b of port to logic 1 state.
Example:
/* set bit 5 of I/O Port A output to logic 1 for non-XMEGA chips */
SETBIT(PORTA,5);
在阅读了一些有关宏的内容之后,我对它们的理解还远远不够,我注意到他们使用了
#define comma ,
所以我尝试了这个,我的新错误与旧错误相同。
我已经阅读了一些有关宏的文章,但是它们对我来说是高级的。 所以,请您告诉我解决方案是什么。 您还可以告诉我在哪里可以找到一个逐步教我宏的地方,从其他文章中看到的简单宏到疯狂硬宏。
很抱歉,如果答案太明显了,我不知道如何搜索它来解决我面临的确切问题。
谢谢
您的问题是扩展顺序, some_name
仅被视为SETBIT
唯一参数的一部分
#define SETBIT1(ARG) SETBIT(ARG)
SETBIT1(some_name)
应该管用
您可能会以不同的方式看待它,并因此定义一个宏:
#defined BIT_NAME() SETBIT( PORTL, 6 )
BIT_NAME();
如果需要设置/清除宏,则:
#defined BIT_NAME( b ) (b ? SETBIT( PORTL, 6 ) : CLRBIT( PORTL, 6 ) )
BIT_NAME( 1 );
BIT_NAME( 0 );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.