PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ringpuffer und if- Abfrage



Jürgen75
18.03.2008, 21:25
Hi,

bin ziemlich neu in dem C Gebiet. Da ich mit BASCOM irgendwie nicht mehr weitergekommen bin muß ich mir das alles noch anlernen.

Bei diesem Code (unten) wird der Ringpuffer mit vorgegebenen Daten verglichen und dann geantwortet. Funktioniert so wie er ist auch wunderbar.
Nur möchte ich noch ein paar Optimierungen wo ich aber nicht weiß wie ich die umsetzen kann.

Wenn dieser Code empfangen wurde " if (lexer(&door_all_lock)) " soll das Programm nicht sofort die msg senden, sondern 2 Sekunden warten und dann nochmal überprüfen ob eine Bestimmte Nachricht angekommen ist.
Wichtig wäre mir dass das Programm die 2 Sekunden wartet, wenn die msg schon vorher kommt darf es nicht beachtet werden.

Für eine andere Sache würde ich das aber auch nochmal genau umgekehrt brauchen. Nach dem Empfang von if (lexer(&door_all_lock)) muß innerhalb 2 Sekunden nochmal ein bestimmter Code empfangen werden .. wenn darüber dann einfach nicht mehr beachten.

Kann mir jemand tipps dazu geben ?

Vielen Dank im voraus !!!





while (1)
{

while (uart0_haschar())
{
chl = uart0_getchar();


if (lexer(&door_all_lock))

{
uart0_sendibus_EEP(mirror_driver_foldin_msg);
_delay_ms(100);
uart0_sendibus_EEP(mirror_passanger_foldin_msg);
continue; //im aktuellen Schleifendurchlauf alles abgebrochen, nächster Durchlauf eingeleitet.
}


if (lexer(&door_all_unlock))
{
uart0_sendibus_EEP(mirror_driver_foldout_msg);
_delay_ms(100);
uart0_sendibus_EEP(mirror_passanger_foldout_msg);
continue; //im aktuellen Schleifendurchlauf alles abgebrochen, nächster Durchlauf eingeleitet.
}

}

} // Haupt While-Schleife Hauptprogramm

cli();
return 0;

Jürgen75
20.03.2008, 21:00
kann keiner helfen ? oder hab ich die Fragen zu blöd gestellt ?

Hubert.G
20.03.2008, 21:27
Wofür den Ringpuffer, brauchst du nicht einfach einen Zeittakt den du abfragst

Jürgen75
21.03.2008, 21:33
den Ringpuffer brauch ich ja, weil da ne Menge Codes empfangen werden und ich ja nur die bestimmten brauchen kann. Das PRG funzt ja wie gesagt, möchte es nur noch optimieren.

Darf ich in ne If - Schleife nochmal eine If Abfrage einbauen ?
Das quasi wenn der erste richtige Code empfangen wird noch auf den zweiten gewartet wird...
Hab es schon probiert aber anscheinend irgendwie nicht richtig.

Hubert.G
21.03.2008, 21:41
Natürlich kannst du eine weitere if-Schleife einbauen, du musst nur sicherstellen das die erste if-Bedingung noch wahr ist wenn die zweite wahr wird.

Jürgen75
22.03.2008, 10:20
:-k

kannst du mir bitte ein Beispiel zeigen ? vll sogar in meinem angegebenen Code... oder hast einen Link wo das so ist.

Danke !

Hubert.G
22.03.2008, 11:17
Wenn du nach der ersten if Abfrage noch warten musst, dann ist es besser, wenn du dir in der ersten if abfrage ein Merkbit setzt und dies in der zweiten if- Abfrage mit Auswertest. Warten ist immer schlecht.
Hier siehst du eine geschachtelte if-Schleife: www.mikrocontroller.net/articles/AVR-GCC-Tutorial#.28Tasten-.29Entprellung

Jürgen75
24.03.2008, 21:31
ok danke, mal schaun ob ich das in meinem Code so einbinden kann.