triplebit
04.10.2006, 18:06
Hallo zusammen,
ich bastel momentan an einer Art TWI-Protokoll. Ich möchte in einer MultiMaster-Umgebung(muss sein, da MC's von sich aus Nachrichten verschicken müssen) Nachrichten senden und empfangen. Nach der KeepItSimple-Regel habe ich erstmal MR/ST rausgenommen(Master kann nur senden und Slave nur empfangen). Die Implementierung via TWI.h habe ich eigentlich im Griff. Mein Problem ist das Protokoll selbst. Ich stelle mir das momentan so vor. Ein MC entscheidet eine Nachricht zu versenden, prüft ob der Bus frei ist, und sendet seine Nachricht, die vom Empfänger mit einer eigenen Nachricht quitiert wird(Eine Art ACK auf Software Basis). Kommt kein ACK vom Empfänger, so wird die Nachricht n-mal wiederholt.
Jetzt mein Problem:
Ich muss andere Ereignisse in Echtzeit abarbeiten, die Nachrichten müssen nicht in Echtzeit erfolgen. Wenn sich Nachrichten aufstauen, weil z.B. der Bus belegt ist, oder entsprechend viele Ereignisse auftreten, kann ich nicht warten bis der Bus wieder frei ist, und muss die Nachrichten erstmal queuen. Mir schwebt da ein FIFO-Speicher vor. Nur wie realisiere ich den. Es könnte auch vorkommen das sich Nachrichten an verschiedene Empfänger stauen.
Wie realisiere ich einen FIFO-SendeSpeicher mit Empfänger-Adressen in C?
Wie realisiere ich einen FIFO-Empfangsspeicher in C?
Wie fange ich einen Speicherüberlauf des FIFO's ab? (Ich werde wohl experimentiell ermitteln müssen wie groß der FIFO sein muss)
Eventuell muss ich noch anderen MC's die Möglichkeit geben zu senden, also den BUS kurzfristig freigeben, bevor die nächste Nachricht verschickt wird
Bitte Anworten am Besten mit BeispielCode um Missverständnissen vorzubeugen.
Gruß
Martin
ich bastel momentan an einer Art TWI-Protokoll. Ich möchte in einer MultiMaster-Umgebung(muss sein, da MC's von sich aus Nachrichten verschicken müssen) Nachrichten senden und empfangen. Nach der KeepItSimple-Regel habe ich erstmal MR/ST rausgenommen(Master kann nur senden und Slave nur empfangen). Die Implementierung via TWI.h habe ich eigentlich im Griff. Mein Problem ist das Protokoll selbst. Ich stelle mir das momentan so vor. Ein MC entscheidet eine Nachricht zu versenden, prüft ob der Bus frei ist, und sendet seine Nachricht, die vom Empfänger mit einer eigenen Nachricht quitiert wird(Eine Art ACK auf Software Basis). Kommt kein ACK vom Empfänger, so wird die Nachricht n-mal wiederholt.
Jetzt mein Problem:
Ich muss andere Ereignisse in Echtzeit abarbeiten, die Nachrichten müssen nicht in Echtzeit erfolgen. Wenn sich Nachrichten aufstauen, weil z.B. der Bus belegt ist, oder entsprechend viele Ereignisse auftreten, kann ich nicht warten bis der Bus wieder frei ist, und muss die Nachrichten erstmal queuen. Mir schwebt da ein FIFO-Speicher vor. Nur wie realisiere ich den. Es könnte auch vorkommen das sich Nachrichten an verschiedene Empfänger stauen.
Wie realisiere ich einen FIFO-SendeSpeicher mit Empfänger-Adressen in C?
Wie realisiere ich einen FIFO-Empfangsspeicher in C?
Wie fange ich einen Speicherüberlauf des FIFO's ab? (Ich werde wohl experimentiell ermitteln müssen wie groß der FIFO sein muss)
Eventuell muss ich noch anderen MC's die Möglichkeit geben zu senden, also den BUS kurzfristig freigeben, bevor die nächste Nachricht verschickt wird
Bitte Anworten am Besten mit BeispielCode um Missverständnissen vorzubeugen.
Gruß
Martin