void loop() { readSerialBus(); shortCircuit(); if(packetSent) { // signal from ISR that last bit is transmitted on tracks if(nextPacket()) { // nextPacket returns true when the first following packet is a speed packet nextAddres(); } // select next 'active' addres assemblePackets(); // assemble a new packet sendPacket(); } } // sets required variables and enables ISR
@ Marco, jouw aanpak is goed gevonden. Ik ben gestart met gelinkt lijsten van buffers voor diverse soorten pakketten en jouw oplossing is zelfs niet bij mij opgekomen.
/***** MAIN LOOP *****/void loop() { readSerialBus(); shortCircuit(); #define State(x) break; case x: if(x ## F()) switch(state){ default: State(assemblePacket){ state = awaitPacketSent; } State(awaitPacketSent){ if(newInstructionFlag) state = newPacketSent; else state = nextAddres; } State(nextAddres){ if(lastAddresFlag) state = nextPacketType; else state = assemblePacket; } State(newPacketSent){ if(newPacketSentFlag) state = assemblePacket; else state = nextPacketType; } State(nextPacketType){ state = assemblePacket; } break; } #undef state}
define State(x) break; case x: if(x ## F())
State(assemblePacket) {
break; case assemblePacket: if(assemblePacketF()) {