gpt4 book ai didi

一个预处理器函数可以用来定义多个预处理器宏吗?

转载 作者:行者123 更新时间:2023-11-30 15:20:27 24 4
gpt4 key购买 nike

是否可以创建一个预处理器函数来定义多个其他预处理器宏?

我正在使用一个微 Controller 框架,该框架需要创建一些宏才能使通用中断处理程序正常运行:

<MODULE_NAME>_IRQ_PIN         //ex: PORTB_PIN(0)
<MODULE_NAME>_IRQ_IN_REGISTER //ex: GPIO_PBIN
<MODULE_NAME>_IRQ_NUMBER //ex: GPIO_IRQA
<MODULE_NAME>_IRQ_INTCFG_REG //ex: GPIO_INTCFGA

从实现的角度来看,我试图使这个过程更加通用和容易。需要定义大约十个这样的宏,但是当给定 1) 端口名称 2) 引脚号和 3) IRQ 名称时,它们的定义都可以导出。我希望创建一个预处理器函数来生成所有这些宏。像这样的东西:

#define MAKE_INTERRUPT_MACROS(module, port, pin, irq_num) \
#define module##_IRQ_pin PORT##port##_PIN(##pin##) \
#define module##_IRQ_IN_REGISTER GPIO_P##port##IN \
#define module##_IRQ_NUMBER GPIO_IRQ##irq_num \
#define module##_IRQ_INTCFG_REG GPIO_INTCFG##irq_num

是否有合法的方法让处理器执行上述操作,其中单个预处理器函数会根据传递给函数的参数生成多个其他宏?

最佳答案

我认为这个经典方案可以解决你的问题。这是一种简单明了的方法:

#ifdef CPU_X
#define IRQ_PIN 0
#define IRQ_IN_REGISTER 3
#define IRQ_NUMBER 11
#define IRQ_INTCFG_REG 12
#endif

#ifdef CPU_YY
#define IRQ_PIN PORTB_PIN(1)
#define IRQ_IN_REGISTER GPIO_PBIN(6)
#define IRQ_NUMBER GPIO_IRQA(9)
#define IRQ_INTCFG_REG GPIO_INTCFGA(0xA)
#endif

#ifdef CPU_KK
/* .
. Another CPU
.
*/
#endif

#ifdef CPU_K2
/* .
. Another CPU
.
*/
#endif

你可以使用-D CPU_xx编译指定CPU的代码,问题就应该解决了!

我假设您可能有一些其他宏(例如:GPIO_IRQA(9)),并且在 CPU_YY 中我使用了它,但它也可能用于其他 CPU。

关于一个预处理器函数可以用来定义多个预处理器宏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30014793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com