Hi zusammen, ich programmiere gerade an einem Midi Controller. Für den Midi-Eingang soll es folgende Möglichkeiten geben: - alles was am Uart gelesen wird am Uart wieder ausgeben - ggf. Midi CC PC Sysex Befehle selbst verarbeiten 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. 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. Aktuell lese ich den UART über einen Interrupt aus. Aber wie bearbeite ich das dann am besten weiter? Fehlerhandling etc.? Gruß, Sammy
Viel verstehe ich nicht von deiner Frage :-) Allgemein: einen ausreichend grossen Ringbuffer basteln. Wie gross der sein muss, kann dir keiner exakt sagen. Kommt drauf an, wieviele Daten reinkommen und wie lange die Verarbeitung schlimmstenfalls dauert.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.