sam schrieb:
Geht mir wie Joachim: SO ganz klar ist mir nicht, wonach eigentlich
gefragt wird.
> wie baue ich am besten die Verarbeitung auf, so dass es keine Lücken
> gibt in dem sich der Buffer überschreibt bevor er verarbeitet wurde.
Ist denn die Frage überhaupt relevant? Den verbleibenden Speicher
steckst du in die Eingangsbuffer. Die Frage ist ja nicht "wie baue ich
die Verarbeitung eines Buffers auf" sondern "wieviel Platz kann ich für
den/die Buffer bereit stellen, so dass ich alles rein bringe". Der Platz
ist dir aber sowieso vorgegeben. D.h. da geht es nicht um "am besten".
> Wie handhabe ich es, das z.B. CC Befehle insgesamt 3 Byte lang sind, PC
> Befehle nur 2 Byte und in meinem Projekt Sysex Befehle von 30 bis 40
> Bytes.
Was interessieren dich CC Befehle? In deinen Anforderungen steht, du
möchtest Sysex Befehle bearbeiten und sonst nichts. CC oder sonstige
Befehle interessieren doch gar nicht. Dein Empfangscode hat 2 Modi:
einen für "Ich schleife alles durch" und einen für "Ich hab ein Sysex
gesehen und fische mir die Bytes raus". Im Interrupt siehst du dir jedes
Byte an, ist es ein Statusbyte dann muss es auch noch ein SysEx sein,
damit die Umschaltung in den 2.ten Modus erfolgt. Ansonsten wird das
Byte so wie es empfangen wurde sofort wieder am Ausgang ausgegeben und
landet überhaupt nicht im Buffer. Erst wenn das Programm im "SysEx"
Modus ist, werden die Bytes rausgefischt. Ob du das komplette Telegram
abwarten musst oder ob parallel mit dem Emfpang gleich mit der
Verarbeitung begonnen werden kann, weißt nur du, weil du weißt was
dieses SysEx überhaupt machen soll. Mit dem nächsten Statusbyte fällt
der Empfangscode aus dem "SysEx Modus" heraus (wenn es sich nicht
zufällig um einen weiteren SysEx handelt.