Token-Pasting Operator (##)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi I am using ATXmega128A1 controller and AVR studio as developing tool.
I am trying to use Token-Pasting Operator (##).

#define DO1_ON     D, 0
#define DO1_OFF    D, 1

#define DO_SET_1(X, Y)      PORT ## X ##.OUTSET = PIN ## Y ## _bm
#define DO_CLEAR_1(X, Y)    PORT ## X ##.OUTCLR = PIN ## Y ## _bm

#define DO_SET(DO_STATUS)      DO_SET_1(DO_STATUS)
#define DO_CLEAR(DO_STATUS)    DO_CLEAR_1(DO_STATUS)

I want to use below variables

PORTD.OUTSET = PIN0_bm
PORTD.OUTCLR = PIN0_bm

PORTD.OUTSET = PIN1_bm
PORTD.OUTCLR = PIN1_bm

So to replicate as above I am using below macros

DO_SET_1(DO1_ON); 
DO_ CLEAR_1(DO1_ON); 

But I am getting following error  - "error: macro "DO_SET_1" requires 2
arguments, but only 1 given"

Now if I call 

DO_SET(DO1_ON);
DO_ CLEAR(DO1_ON);

The above error is not coming. Now I am getting other error saying
"error: pasting "PORTD" and "." does not give a valid preprocessing
token"

Queries:
1.      By calling DO_SET() how does the error "DO_SET_1" requires 2
arguments, but only 1 given" is removed when DO_SET() is expanding to
DO_SET_1()

2.      Can't "." be used as part of Token-Pasting.

 
Please let me know your comments.

Thanks & Regards
Vishnu


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux