预处理器/条件变量定义

时间:2016-04-15 16:55:37

标签: c++ arduino raspberry-pi

以下代码在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(...)

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

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

1 个答案:

答案 0 :(得分:1)

我会摆脱重复,并且更像这样:

#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 };

如果存在某种模式,您也可以稍微合并常量。