PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C: Empfangspuffer



Thorsten
11.07.2006, 09:37
Hi,

ich scheib grad eine I²C Slave Bibliothek für den AtMega8 (in C).
Funktioniert auch soweit, dass die empfangenen Bytes in
der Interruptroutine in einen Puffer (32 Byte groß, 1Byte breit)
geschrieben werden. In der Hauptschleife wird dann eine Funktion
aufgerufen die die Daten komplett zurückgibt wenn eine
Übertragung abgeschlossen ist. Das funktioniert bis
hierhin auch super.

Probleme bekomme ich nun wenn mehrere Nachrichten
gesendet werden und in den Puffer geschrieben werden.
Also ein Master z.B. 3 Befehle gesendet hat und ich den
Puffer nicht schnell genug auslese.
Wie trennt ihr solche Nachrichten? Wenn ich z.B. ein extra
Trennzeichen definiere müsste ich den Puffer auf 16bit
erweitern da in den Daten die über I²C kommen alle
1byte Zeichen vorkommen können (z.B. bei Sensordaten).
Ist zwar noch möglich vom Speicher her, aber
irgendwie passt es mir nicht soviel Speicher zu "verschwenden".

Wie lößt ihr solche Sachen? Hab schon daran gedacht das über eine
verkettete Liste zu lösen, aber malloc auf einen Mikrokontroller
möcht ich auch vermeiden.

Vieleicht hat jemand noch Anregungen, irgendwie hängt ich
da fest.

mfg
Thorsten

SprinterSB
11.07.2006, 10:01
Wo eine Nachricht/Datensatz anfängt/aufhört/konsistent ist, etc siehst du doch an deinem Protokoll, das sagt wieviele Daten kommen und welche etc.

Thorsten
11.07.2006, 10:15
Hm, wahrscheinlich hab ich wohl auch ein kleines Designproblem, Protokoll gibst im
Moment noch nicht so richtig, hab ein paar Befehle
mit und ohne Parameter und welche für Sensordaten.

Dann muss sich wirklich die nachfolgende Funktion
die die Daten aus dem Puffer ließt darum kümmern
die Daten auseinanderzuklamüsern, hat sich bei I²C
nur angeboten da es ein richtiges Stop Signal gibt.
Werd mal in dieser Richtung schauen.
Vereinfacht dann auch die ISR.

mfg
Thorsten