Resume - Suspend

Multitasking

rbr50
 
Avatar
 
Betreff:

Resume - Suspend

 · 
Gepostet: 08.09.2011 - 08:16 Uhr  ·  #1
Hallo,

ich beschäftige mich nun zum 1. Male richtig mit dem Multitasking. Dolle Sache!

Bitte eine Frage zu folgendem Fragment:

Code
Task LadenMaxStrom(idata, 8, suspended);
begin
  if (ADStrom > SollStrom) then
    if    (PWMport1A > 1) then
      dec(PWMport1A);
    endif;
  else
    if (ADVolt > LadeSpannung)  and(PWMport1A > 1) then
      dec(PWMport1A);
      LadeModus:= lmZeit;
      Resume(LadenNachZeit);
      suspend(self);
    endif;
    if (ADVolt < LadeSpannung) and(PWMport1A < 254) then
      inc(PWMport1A);
    endif;
  endif;
end;


Wird die Anweisung suspend(self) sicher ausgeführt? Oder kann es sein, das nach dem Resume(LadenNachZeit) der Task drankommt?

Ich habe es so verstanden, das Tasks immer komplett abgearbeitet werden. (Wenn sie nicht länger als einen Systick brauchen). Also dürfte suspend(self) sicher ausgeführt werden.

Danke fürs Lesen und Ihre Zeit!

Rolf
rbr50
 
Avatar
 
Betreff:

Re: Resume - Suspend

 · 
Gepostet: 08.09.2011 - 12:06 Uhr  ·  #2
Hallo,

ich habe gerade im Simulator getestetet.
Code
resume(EinTask);
suspend(self);

wird richtig ausgeführt, also EinTask wird gestartet, dann der eigene Task beendet.

Aber bei der Reihenfolge

Code
suspend(self);
resume(EinTask);


führt das suspend dazu, dass das resume nicht mehr ausgeführt wird. Auch innerhalb eines Task. Wobei ich dachte, das ein Task IMMER ganz bearbeitet wird.

Habe ich jetzt also richtig simuliert und verstanden: suspend(self) bricht Task und Process unbedingt ab, es wird nichts mehr nach dem suspend-Befehl ausgeführt?

Danke!

Rolf
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 26
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Resume - Suspend

 · 
Gepostet: 08.09.2011 - 13:05 Uhr  ·  #3
Hallo Rolf,

ja, das ist komplett richtig. Ein Suspend bricht den laufenden Task sofort ab. Die folgende Anweisung wird nicht mehr ausgeführt. Bei einem Task wird dieser, falls irgendwo ein Resume dieses Tasks erfolgt war, der Task wieder von Anfang an gestartet. Bei einem Prozess wird nach einem Resume wieder da weitergemacht wo das Suspend stand, also hinter dem Suspend.

rolf
rbr50
 
Avatar
 
Betreff:

Re: Resume - Suspend

 · 
Gepostet: 08.09.2011 - 15:15 Uhr  ·  #4
Hallo,

vielen Dank für Ihre Antwort. Und Hut ab vor Ihren Leistungen. Wie schaffen Sie es, auch noch Zeit fürs Forum zu finden?


Rolf
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 26
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Resume - Suspend

 · 
Gepostet: 08.09.2011 - 20:20 Uhr  ·  #5
8-) die Nacht zum Tage machen

rolf
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   93   107 · Page-Gen-Time: 0.027654s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI