以下代码在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(...)
最后,我的问题:这有效,但我不确定这个"好的风格"或隐藏在预处理程序表达式后面的垃圾。
我知道,我知道 - 通常你可以/应该通过接口和堆上的指针/智能指针来解决这个问题。但动态内存在这些小型设备上有点问题......
答案 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 };
如果存在某种模式,您也可以稍微合并常量。