emwin 发表于 2021-7-31 16:40:48

实现后缀用宏定义的值,宏嵌套和拼接求助?

本帖最后由 emwin 于 2021-7-31 17:31 编辑

#include <stdio.h>

#define DMA_DMAIF_TCIF0         100
#define DMA_DMAIF_TEIF0         200

#define UART4_RXDMA_CH_NUM      0       /*"!!!!串口配置的DMA通道号!!!!"*/

#define UART4_RX_DMA_CH_TXIF(num)   DMA_DMAIF_TCIF##num
#define UART4_RX_DMA_CH_TEIF(num)   DMA_DMAIF_TEIF##num

int main()
{
    printf("%d, %d", UART4_RX_DMA_CH_TXIF(0), UART4_RX_DMA_CH_TEIF(0));
    return 0;
}我想简化切换DMA通道的代码修改,改UART4_RXDMA_CH_NUM。怎么让UART4_RX_DMA_CH_TXIF(UART4_RXDMA_CH_NUM)得到DMA_DMAIF_TCIF0?
已解决:

#include <stdio.h>

#define DMA_DMAIF_TCIF0         100
#define DMA_DMAIF_TEIF0         200
#define UART4_RXDMA_CH_NUM      0       /*"!!!!串口配置的DMA通道号!!!!"*/

#define UART4_RX_DMA_TCIF(x)    PARAM_TC(x)
#define UART4_RX_DMA_TEIF(x)    PARAM_TE(x)

#define PARAM_TC(num)   DMA_DMAIF_TCIF##num
#define PARAM_TE(num)   DMA_DMAIF_TEIF##num

int main()
{
    printf("%d %d", UART4_RX_DMA_TCIF(UART4_RXDMA_CH_NUM), UART4_RX_DMA_TEIF(UART4_RXDMA_CH_NUM));
    return 0;
}



eric2013 发表于 2021-7-31 17:55:18

这种玩法,CMSIS-Driver里面全是这种,楼主可以借鉴完善下。
页: [1]
查看完整版本: 实现后缀用宏定义的值,宏嵌套和拼接求助?