#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))
#endif
int main (void) {
printf ("%s\n", STRING(REPEAT(RTE_SPI,0,_RX_DMA)));
printf ("%s\n", STRING(macrotest));
return 0;
}
玩具宏
最新推荐文章于 2025-03-11 19:04:12 发布