Forum: Mikrocontroller und Digitale Elektronik LCD-Anwendungen und Delay-Methoden


von Owen S. (senmeis)


Lesenswert?

Servus,

ich nutze gerade die LCD-Bibliothek von master.andre: 
Beitrag "GLCD Routinen ( KS0108, HD61202 )". In dieser Lib werden 
zahlreiche Delay-Methoden aufgerufen, wie z.B. _delay_us() und 
_delay_ms(). Die Frage ist, was passiert wenn es noch andere Tasks gibt, 
z.B. Datenverarbeitung, Komminikationen usw. Das Programm hält an bei 
diesen Delay-Mothoden und kann weitere Aktionen nicht mehr ausführen. 
Ist dies üblich in LCD-Anwendungen?

Cu
Owen

von Arne S. (Gast)


Lesenswert?

Du arbeitest mit GCC? IIRC sind diese _delay...() Funktionen sowas wie 
NOP-Schleifen, die Rechenzeit verbraten sollen.
Du schreibst aber:
> was passiert wenn es noch andere Tasks gibt
Meinst Du mit "Tasks" 'andere Aufgaben' oder nutzt Du Tasks eines RTOS?
Wenn Du ein präemptives RTOS nutzt, dann kann dieses die delay-Schleifen 
unterbrechen und andere Aufgaben ausführen. Aaaabber: die delay-Schleife 
weiss nix von der Unterbrechung, d.h. die Zeit, in der ein anderer Task 
läuft, kommt zur delay-Zeit hinzu! Du wartest also >= der delay-Zeit!

von Jens (Gast)


Lesenswert?

Ich frage bei LCDs immer das Statusflag ab. Damit haben sich viele 
Delays schon von vornherein erübrigt. Ansonsten mache ich nur ganz kurze 
Sachen mit einer Delay-Loop, z.B. die Verzögerung zwischen Daten 
ausgeben und CE toogeln. Für alles andere setze ich ein Flag und 
aktiviere den Timerinterupt. Damit wird kaum Rechenzeit sinnlos 
verbraten und die Programmabarbeitung ist effektiver, aber auch 
umständlicher zu programmieren.

von Artur R. (artur2000)


Lesenswert?

Jens schrieb:
> Ich frage bei LCDs immer das Statusflag ab

Das abwarten verbrät Rechenzeit. Das ganze dauert dann oft länger als 
eine delay Zeit.

us kann man in Kauf nehmen.

bei ms Sekunden wird es verschwänderisch. Entweder programierst du etwas 
(zum Beisiel eine Berechnung) die in etwa diese Zeit verbraucht und 
setzt diese anstelle des delays ein oder du benutzt ein RTOS und sagst 
ihm, dass diese Task jetzt verlassen werden kann, jeodch nach sovielen 
ms wieder zurückspringen soll. Du musst dabei achten, das die Priorität 
der Task hoch ist, damit garanitert wird, dass nach der abgelaufenden 
Zeit wieder die Display-Task weiterläuft.

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.