如何在 C 编程中的宏中添加运行时变量

问题描述 投票:0回答:1

我定义了两个宏,如 CPU1_BLA_BLA 和 CPU2_BLA_BLA 。 这两个宏是一些寄存器的地址。就像是 #定义CPU1_BLA_BLA 0x1234,

#定义CPU2_BLA_BLA 0x4567

我有一个函数可以将一些值写入这些寄存器。我正在开发驱动程序,所以我想要一个可以完成这项工作的 API,而不是像下面这样有两个不同的 API

我想为两个 cpu 提供单个二进制文件(可执行文件)并检测它在运行时运行的 cpu

my_func_for_cpu()
{
   var=CPU1_BLA_BLA
}
my_func_for_cpu()
{
   var=CPU2_BLA_BLA
}

现在我想为两个CPU创建单个函数,如下所示

#if condition
   #define which_cpu CPU1 
#elif 
    #define which_cpu CPU2 
my_func_for_cpu()
{
   var=(which_cpu)_BLA_BLA
}

which_cpu 应该在运行时检测 CPU1 或 CPU2

我该如何实现这个?

我可以找到一些条件来检测它在 CPU1 或 CPU2 上运行的天气 但不知道如何在运行时替换这个变量

c macros
1个回答
0
投票

使用宏/预处理器和在运行时确定事物是相互排斥的。我认为您实际上正在寻找的是查找表。

给出一些

#define CPU1_BLA_BLA 0x1234
#define CPU2_BLA_BLA 0x4567

然后您可以创建一个只读查找表(在MCU系统上分配的闪存):

static const uint16_t CPU [] =
{
  CPU1_BLA_BLA,
  CPU2_BLA_BLA,
};

然后你的代码就变成了

var = CPU [index_from_runtime];

这是最灵活的,因为

index_from_runtime
可以是变量,而不仅仅是输入的整数常量
1
2
等。

© www.soinside.com 2019 - 2024. All rights reserved.