我定义了两个宏,如 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 上运行的天气 但不知道如何在运行时替换这个变量
使用宏/预处理器和在运行时确定事物是相互排斥的。我认为您实际上正在寻找的是查找表。
给出一些
#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
等。