玩具宏

来源:互联网 发布:windows 域 推送 拒绝 编辑:程序博客网 时间:2024/04/27 17:58
#include <stdio.h>#define STRING_1(_VAL) #_VAL#define STRING(_VAL) STRING_1(_VAL)#define LINK_1(A,B) A##B#define LINK(A,B) LINK_1(A,B)#define LINK_A_1(A,B,C) A##B##C#define LINK_A(A,B,C) LINK_A_1(A,B,C)#define DEC1 0#define DEC2 1#define DEC3 2#define DEC4 3#define DEC5 4#define DEC6 5#define DEC7 6#define DEC8 7#define DEC9 8#define REPEAT0(_PRE,_NUM,_POST) MACRO_SHIFT(LINK_A(_PRE,_NUM,_POST))#define REPEAT1(_PRE,_NUM,_POST) LINK(REPEAT,LINK(DEC,_NUM))(_PRE,LINK(DEC,_NUM),_POST)| MACRO_SHIFT(LINK_A(_PRE,_NUM,_POST))#define REPEAT2(_PRE,_NUM,_POST) LINK(REPEAT,LINK(DEC,_NUM))(_PRE,LINK(DEC,_NUM),_POST)| MACRO_SHIFT(LINK_A(_PRE,_NUM,_POST))#define REPEAT3(_PRE,_NUM,_POST) LINK(REPEAT,LINK(DEC,_NUM))(_PRE,LINK(DEC,_NUM),_POST)| MACRO_SHIFT(LINK_A(_PRE,_NUM,_POST))#define REPEAT4(_PRE,_NUM,_POST) LINK(REPEAT,LINK(DEC,_NUM))(_PRE,LINK(DEC,_NUM),_POST)| MACRO_SHIFT(LINK_A(_PRE,_NUM,_POST))#define REPEAT5(_PRE,_NUM,_POST) LINK(REPEAT,LINK(DEC,_NUM))(_PRE,LINK(DEC,_NUM),_POST)| MACRO_SHIFT(LINK_A(_PRE,_NUM,_POST))#define REPEAT6(_PRE,_NUM,_POST) LINK(REPEAT,LINK(DEC,_NUM))(_PRE,LINK(DEC,_NUM),_POST)| MACRO_SHIFT(LINK_A(_PRE,_NUM,_POST))#define REPEAT7(_PRE,_NUM,_POST) LINK(REPEAT,LINK(DEC,_NUM))(_PRE,LINK(DEC,_NUM),_POST)| MACRO_SHIFT(LINK_A(_PRE,_NUM,_POST))#define REPEAT_1(_PRE,_NUM,_POST) LINK(REPEAT,_NUM)(_PRE,_NUM,_POST)#define REPEAT(_PRE,_NUM,_POST) REPEAT_1(_PRE,_NUM,_POST)#define ON      1#define OFF     0#define DMA_CH0 1#define DMA_CH1 2#define DMA_CH2 3#define DMA_CH3 4#define DMA_CH4 5#define DMA_CH5 6#define DMA_CH6 7#define DMA_CH7 8#define RTE_SPI0_RX_DMA                 OFF#define RTE_SPI1_RX_DMA                 OFF#define RTE_SPI2_RX_DMA                 OFF#define RTE_SPI3_RX_DMA                 OFF#define RTE_SPI4_RX_DMA                 OFF#define RTE_SPI5_RX_DMA                 OFF#define RTE_SPI6_RX_DMA                 OFF#define RTE_SPI7_RX_DMA                 DMA_CH5#define RTE_SPI0_TX_DMA                 DMA_CH0#define RTE_SPI1_TX_DMA                 DMA_CH1#define RTE_SPI2_TX_DMA                 DMA_CH2#define RTE_SPI3_TX_DMA                 DMA_CH3#define RTE_SPI4_TX_DMA                 DMA_CH4#define RTE_SPI5_TX_DMA                 DMA_CH5#define RTE_SPI6_TX_DMA                 DMA_CH6#define RTE_SPI7_TX_DMA                 DMA_CH7#define MACRO_SHIFT(_VAL) (1 << (_VAL))#define MACRO_FLAG 0#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI0_RX_DMA)) != 0)#error "dma config RTE_SPI0_RX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,0,_RX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI0_TX_DMA)) != 0)#error "dma config RTE_SPI0_TX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,0,_RX_DMA) | REPEAT(RTE_SPI,0,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI1_RX_DMA)) != 0)#error "dma config RTE_SPI1_RX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,1,_RX_DMA) | REPEAT(RTE_SPI,0,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI1_TX_DMA)) != 0)#error "dma config RTE_SPI1_TX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,1,_RX_DMA) | REPEAT(RTE_SPI,1,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI2_RX_DMA)) != 0)#error "dma config RTE_SPI2_RX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,2,_RX_DMA) | REPEAT(RTE_SPI,1,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI2_TX_DMA)) != 0)#error "dma config RTE_SPI2_TX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,2,_RX_DMA) | REPEAT(RTE_SPI,2,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI3_RX_DMA)) != 0)#error "dma config RTE_SPI3_RX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,3,_RX_DMA) | REPEAT(RTE_SPI,2,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI3_TX_DMA)) != 0)#error "dma config RTE_SPI3_TX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,3,_RX_DMA) | REPEAT(RTE_SPI,3,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI4_RX_DMA)) != 0)#error "dma config RTE_SPI4_RX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,4,_RX_DMA) | REPEAT(RTE_SPI,3,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI4_TX_DMA)) != 0)#error "dma config RTE_SPI4_TX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,4,_RX_DMA) | REPEAT(RTE_SPI,4,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI5_RX_DMA)) != 0)#error "dma config RTE_SPI5_RX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,5,_RX_DMA) | REPEAT(RTE_SPI,4,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI5_TX_DMA)) != 0)#error "dma config RTE_SPI5_TX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,5,_RX_DMA) | REPEAT(RTE_SPI,5,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI6_RX_DMA)) != 0)#error "dma config RTE_SPI6_RX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,6,_RX_DMA) | REPEAT(RTE_SPI,5,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI6_TX_DMA)) != 0)#error "dma config RTE_SPI6_TX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,6,_RX_DMA) | REPEAT(RTE_SPI,6,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI7_RX_DMA)) != 0)#error "dma config RTE_SPI7_RX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,7,_RX_DMA) | REPEAT(RTE_SPI,6,_TX_DMA))#endif#if ((~(0x1) & MACRO_FLAG & MACRO_SHIFT(RTE_SPI7_TX_DMA)) != 0)#error "dma config RTE_SPI7_TX_DMA conflict with others!"#else#undef MACRO_FLAG#define MACRO_FLAG (REPEAT(RTE_SPI,7,_RX_DMA) | REPEAT(RTE_SPI,7,_TX_DMA))#endifint main (void) {        printf ("%s\n", STRING(REPEAT(RTE_SPI,0,_RX_DMA)));        printf ("%s\n", STRING(macrotest));        return 0;}

0 0
原创粉丝点击