AVR UART Eingang für Midi Daten - wie Buffer programmieren

Gast #3465149
Lesenswert?

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
#3465325
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren