Hallo zusammen,
ich bin grade dabei mich in TinyOS einzuarbeiten. Für meine Masterarbeit
entwickle ich ein Funk- Sensornetz und verwende dazu die ZigBit Module
von Atmel bzw. das Eval Kit von Meshnetics (jetzt A.N. Solutions)
welches das ZigBit Modul verwendet. In Fachkreisen wird das mini
Betriebssystem TinyOS für solche Anwendungen verwendet, daher setzt auch
mein Projekt auf TinyOS (TinyOS 2.1.1) auf.
Meine Frage an Euch: Kennt sich jemand schon mit TinyOS aus, der mir
Tipps zur Programmierung und evtl. konkrete Beispielprogramme geben
kann. Wenn jemand selber Fragen hat kann er sie auch an mich stellen,
ich hab mir schon ein paar Grundlagen in diesem Bereich erarbeitet. Wenn
ich eine Antwort weiß dann werde ich sie posten.
Konkrete Fragen:
Ich versuche über die UART Schnittstelle mit dem Modul Daten vom PC zu
empfangen (Senden Modul -> PC funktioniert bereits). Das Problem liegt
in der anderen Richtung. Der PC sendet ein TinyOS Frame entsprechend
message_t Framestruktur aus TEP 111 und dem Paketformat in TEP 113 unter
3.6.
Das Problem ist dass TinyOS auf dem höchsten Abstraktionslayer der
Komponente SerialAMSenderC keine Daten empfängt. Das Event wird nie
aufgerufen obwohl Datenframes an das Modul gesendet werden.
1 | event message_t* Receive.receive(message_t* bufPtr, void* payload, uint8_t len)
|
2 | {
|
3 | Leds.led0Toggle();
|
4 | }
|
Hat hier jemand Erfahrung an was das liegen könnte oder sogar ein Code
der funktioniert? Mein Code ist aus dem Beispiel von TinyOS
(TestSerial).
Meine zweite Frage ist:
An eine I2C Porterweiterung sollen Daten (z.B. Bytes) der Reihe nach
geschickt werden. Das Prinzip von TinyOS ist dass es keine blockierenden
Funktionen gibt. Das führt hier aber zu folgendem Problem: Der
Funktionsaufruf Sende Daten_1 kehrt sofort zurück und es wird der zweite
Funktionsaufruf Sende Daten_2 ausgeführt, obwohl Sende Daten_1 noch
nicht fertig ist und das noch anstehende zu sendende Byte wird
überschrieben. Irgendwann kommt natürlich das Event Send Done aber ich
bräuchte eine blockierende Funktion die so lange wartet bis die Daten
gesendet wurden und der Bus (I2C) wieder frei ist. Das System darf aber
nicht komplett blockieren, da ich ja wissen muss wann der Bus wieder
frei ist. Hier bräuchte ich einen Ansatz in Verbindung mit dem
SplitPhase Prinzip oder wie es blockierend mit Busrückmeldung geht.
Vielleicht hat jemand ja hier die ein oder andere Idee oder sogar
Erfahrung mit TinyOS.
Viele Grüße
Mario