2016-04-15 5 views
0

Der folgende Code kompiliert auf Arduino und Himbeere:Preprocessor/bedingte Variablendefinition

#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 

zweiten param ist die in-Kanal Drittel der Out-Kanal ist.

Mit der Preprozessor-Bedingung werden diese Kanäle (Pipes RF24)) vertauscht. Die Kommunikation läuft mehr oder weniger über RX/TX (vereinfacht). Lesekanal auf der Clientseite ist der Schreibkanal auf der Serverseite und umgekehrt.

Dies macht es möglich, den gleichen Code auf dem Client und auf dem Server zum Beispiel zu schreiben:

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

Schließlich meine Frage: Das funktioniert, aber ich bin nicht sicher, ob dieser „gute Stil“ oder Mist versteckt hinter einem Präprozessor-Ausdruck.

Ich weiß, ich weiß - normalerweise könnten/sollten Sie dieses Problem mit einer Schnittstelle und auf dem Heap über Zeiger/Smartpointer lösen. Aber dynamischer Speicher ist ein bisschen ein Problem auf den kleinen Geräten ...

Antwort

1

würde ich der Vervielfältigung loszuwerden und tun es wie folgt aus:

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

Sie könnten auch in der Lage sein, die Konstanten zu konsolidieren etwas wenn es ein Muster gibt.

+0

Whoops, brauchen auch 'K3' und' K4' für die Werte, die auf 'B1' und' B2' enden. –

+0

Das war schnell - danke. Sieht besser aus als mein Ansatz. Aber ich habe 2 Kanäle mit 4 Adressen: xxA1, A2, B1, B2 (jeder Kanal hat 2 verschiedene Adressen). Ich benutzte 2 Kanäle für dieses Beispiel - reale Anwendung hat 5 Kanäle ... huhhh Sie sahen es bereits ... –

+0

Vielleicht sollte ich eine "Paar-Klasse" definieren (kann nicht STL auf Arduino verwenden) und etwas wie const myPair tun Paar1 (0x..A1,0x..B1); - führt mich zu meiner zweiten Frage: Ein Grund warum du define verwendest und nicht const? Erinnerung? –

Verwandte Themen