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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.