确定在嵌入式 C 中运行时使用哪个变量
Determine which variable use at runtime in Embedded C
我正在处理的这个固件有两个不同的 makefile。
数据版本 1 和数据版本 2。两个版本都在各自的 make 文件中使用名为 ble_communication.c 的相同文件。
为了区分这两个版本,我们在 ble_communication.c
中声明了两个变量
static uint8_t data_version1[] = {0x00, 0x00, 0x00, 0x00, 0x00};
static uint8_t data_version2[] = {0x01, 0x00, 0x00, 0x00, 0x00};
在 ble_communication.c 文件中,我们有一个名为
的函数
uint32_t start_broadcasting(void)
{
send_beacon(OPCODE, 0, /* determine data version here to send at runtime */, key);
}
我的问题是,由于我们对两个版本的构建使用相同的文件 ble_communication.c,代码如何 select 在代码运行时将哪个变量用于其构建?如果它是数据版本 1,我希望它使用 data_version1[],如果它是数据版本 2,它使用 data_version2[].
我不能使用 #ifndef switch 语句,因为新的设计指南不允许我使用它们
老实说,我更愿意使用 #ifdef
,但这里有一个解决方法。
使用 makefile 创建两个包含所需数据的文件和 select 构建时所需的文件。
首先准备两个C文件,ble_communication_data1.c
和ble_communication_data2.c
。请随意选择一个更清晰的名称。
将所需数据放入每个 C 文件中,但名称保持相同。
ble_communication_data1.c
uint8_t ble_communication_data[5] = {0x00, 0x00, 0x00, 0x00, 0x00};
ble_communication_data2.c
uint8_t ble_communication_data[5] = {0x01, 0x00, 0x00, 0x00, 0x00};
创建头文件以访问数据:
ble_communication_data.h
extern uint8_t ble_communication_data[5];
修改ble_communication.c
使其使用公共变量名:
#include "ble_communication_data.h"
uint32_t start_broadcasting(void)
{
send_beacon(OPCODE, 0, ble_communication_data, key);
}
最后,在每个 makefile 中,将正确的 ble_communication_data
C 文件添加到要编译的文件列表中。
我正在处理的这个固件有两个不同的 makefile。 数据版本 1 和数据版本 2。两个版本都在各自的 make 文件中使用名为 ble_communication.c 的相同文件。
为了区分这两个版本,我们在 ble_communication.c
中声明了两个变量static uint8_t data_version1[] = {0x00, 0x00, 0x00, 0x00, 0x00};
static uint8_t data_version2[] = {0x01, 0x00, 0x00, 0x00, 0x00};
在 ble_communication.c 文件中,我们有一个名为
的函数uint32_t start_broadcasting(void)
{
send_beacon(OPCODE, 0, /* determine data version here to send at runtime */, key);
}
我的问题是,由于我们对两个版本的构建使用相同的文件 ble_communication.c,代码如何 select 在代码运行时将哪个变量用于其构建?如果它是数据版本 1,我希望它使用 data_version1[],如果它是数据版本 2,它使用 data_version2[].
我不能使用 #ifndef switch 语句,因为新的设计指南不允许我使用它们
老实说,我更愿意使用 #ifdef
,但这里有一个解决方法。
使用 makefile 创建两个包含所需数据的文件和 select 构建时所需的文件。
首先准备两个C文件,ble_communication_data1.c
和ble_communication_data2.c
。请随意选择一个更清晰的名称。
将所需数据放入每个 C 文件中,但名称保持相同。
ble_communication_data1.c
uint8_t ble_communication_data[5] = {0x00, 0x00, 0x00, 0x00, 0x00};
ble_communication_data2.c
uint8_t ble_communication_data[5] = {0x01, 0x00, 0x00, 0x00, 0x00};
创建头文件以访问数据:
ble_communication_data.h
extern uint8_t ble_communication_data[5];
修改ble_communication.c
使其使用公共变量名:
#include "ble_communication_data.h"
uint32_t start_broadcasting(void)
{
send_beacon(OPCODE, 0, ble_communication_data, key);
}
最后,在每个 makefile 中,将正确的 ble_communication_data
C 文件添加到要编译的文件列表中。