Forum: Mikrocontroller und Digitale Elektronik TinyOS Programmierung


von Mario R. (mario_123)


Angehängte Dateien:

Lesenswert?

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

von Mario R. (mario_123)


Angehängte Dateien:

Lesenswert?

Hab noch eine Datei vergessen hochzuladen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.