LCD-Anwendungen und Delay-Methoden

OP #2164986
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
Gast #2165012
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!
Gast #2165015
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.
#2165028
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren