预处理器/条件变量定义

Preprocessor / conditional variable definition

本文关键字:变量 定义 条件 处理器 预处理      更新时间:2023-10-16

以下代码在Arduino和Raspberry上编译:

#if defined(ARDUINO)
   const Channel channel1{1,uint64_t(0xF0F0F0F0A2LL),uint64_t(0xF0F0F0F0A1LL)};
   const Channel channel2{2,uint64_t(0xF0F0F0F0B2LL),uint64_t(0xF0F0F0F0B1LL)};
#else
    const Channel channel1{1,uint64_t(0xF0F0F0F0A1LL),uint64_t(0xF0F0F0F0A2LL)};
    const Channel channel2{2,uint64_t(0xF0F0F0F0B1LL),uint64_t(0xF0F0F0F0B2LL)};
#endif

第二个参数是in Channel,第三个参数是out Channel。

在预处理器条件下,交换这些通道(管道RF24)。通信或多或少通过RX/TX运行(简化)。客户端的读取通道是服务器端的写入通道,反之亦然。

这使得在客户端和服务器端编写相同的代码成为可能,例如:

RF24Client client1(radio, channel1);
client1.enableReading();
...
client1.write(...)

最后,我的问题是:这是有效的,但我不确定这种"好风格"还是隐藏在预处理器表达式后面的垃圾。

我知道,我知道——通常你可以/应该用接口和堆上的指针/智能指针来解决这个问题。但是动态内存在那些小型设备上有点问题。。。

我会去掉重复,做得更像这样:

#if defined(ARDUINO)
   #define K1 0xF0F0F0F0A2ULL
   #define K2 0xF0F0F0F0A1ULL
   #define K3 0xF0F0F0F0B2ULL
   #define K4 0xF0F0F0F0B1ULL
#else
   #define K1 0xF0F0F0F0A1ULL
   #define K2 0xF0F0F0F0A2ULL
   #define K3 0xF0F0F0F0B1ULL
   #define K4 0xF0F0F0F0B2ULL
#endif
const Channel channel1{ 1, K1, K2 };
const Channel channel2{ 2, K3, K4 };

如果有某种模式的话,您也可以在一定程度上合并常量。