Thorsten
11.07.2006, 10: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
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