Verständnisfrage zu Processen

  • 1
  • 2
  • 3
  • 4
  • 5
  • Page 1 of 5
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Verständnisfrage zu Processen

 · 
Posted: 20.10.2018 - 15:43  ·  #1
Hallo Zusammen,

ich habe ein paar Fragen zu Prozessen bzw. könnt ihr meine Vermutungen bestätigen oder korrigieren .....

Ein Process läuft immer (Priorität * SysTick) lange und wenn das länger als ein Durchlauf wäre auch mehrmals?
Beispiel:
Priorität=3
SysTick=10ms
Laufzeit Process Begin bis End=5ms
Dann würde der Process wenn er dran ist 6x durchlaufen werden?

Gibt es eine Möglichkeit den Process nur 1x durchlaufen zu lassen? Kein Task! Ich dachte es gibt da einen Befehl, der einen Process abbricht und zu Main zurück geht? Ich finde nur in den Handbüchern grad nichts.

Wenn Main und Process die gleiche Priorität haben, läuft also Main und Process immer gleich lang?

Wenn ich Main und einen Process habe und die Priorität beider 1 ist, der SysTick 10ms hat, dann wird Main und der Process jeweils 50*/Sekunde durchlaufen?

Wenn ein Task z.B. 0.5ms Laufzeit hat, Priorität Main und Task ist 1, SysTick 10ms. Dann läuft Main 10ms, Wechsel zum Task (der ja nur einmal durchlaufen wird) 0.5ms, Main 10ms, ... usw.? Wie paßt das ins Scheduler-Zeitraster von 10ms? Was macht das Programm die 9.5ms wenn der Task fertig ist? Oder läuft Main sofort nach dem Task weiter?

Ich hoffe ihr könnt mich erleuchten :)

Gruss
Harry
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 20.10.2018 - 16:00  ·  #2
Hallo Harry,
ja, das ganze läuft im Kreis. Wenn z.B. ein Task oder Prozess seine Zeit nicht
aufgebraucht hat, kommt der nächste dran. Je nachdem wieviel Zeit verbraucht
wurde wird dem nächsten Prozess die unverbrauchte Zeit zugeschlagen
oder abgezogen. Normalerweise kein Problem. Da Tasks niemals aufeinander
folgen können berührt das die Tasks nicht.

Ein Prozess oder Task kann mit "Schedule" abgebrochen werden.

rolf
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 20.10.2018 - 16:01  ·  #3
Hi,

wenn ein Prozess früher als "max. Time" endet bekommt der Scheduler
die Kontrolle, es kommt also der nächste in der Run Queue dran.
Auch ein kurzer Prozess läuft nur 1 Mal. Auch ohne spezielle Anweisung.
Der Rest seiner Zeit steht dann den anderen zur Verfügung.
Man kann aber mit "schedule" dies auch erzwingen ohne dass der
normale Programmfluss im Prozess ohnehin zu dessen Ende gelangt
(ist dann identisch zu einem "goto End").

Schau dir mal im Compiler Manual im Kapitel 5 den Punkt "Multi Tasking
Diagramm" an. Insbesondere die blauen "schedule" Balken. Ob da
wirklich der "schedule" Befehle steht oder der Prozess einfach endet
kommt auf's Gleiche raus.

Gunter
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 20.10.2018 - 16:57  ·  #4
Hallo ihr beiden,

erstmal vielen Dank. Ich frage, weil ich ein kleines Programm geschrieben und im Simulator in Einzelschritten durch gestept habe. Dabei ist mir aufgefallen, daß ein Process 3x durchlaufen wurde und es dann erst zum Main zurück ging. SysTick 1ms, Laufzeit Process <1ms, Priorität Process 3. Ich dachte dann, daß der Process wohl so lange läuft, bis seine 3*1ms vorbei sind.

Ich werde mal noch ein bisschen damit rum spielen :)

Gruss
Harry
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 20.10.2018 - 17:02  ·  #5
auch das ist im o.a. Diagramm zu finden:
"Main hat Default Priority 5" ==> Main kam also gar nicht dran.
Schon in der ersten Zeile läuft z.B. P1 über 3 Ticks bis mal
umgeschaltet wird
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 20.10.2018 - 17:16  ·  #6
Hi Gunter,

ok jetzt hab ich das auch gefunden: weiter hinten im Manual ist nochmal was über Multitasking.
Ganz blöde Frage: Wie macht man in einem Process/Task am besten ein Delay? Sleep geht nicht, da das Delay im Bereich 1-100 NOPs sein soll also wesentlich kürzer als ein Sleep in SysTicks. Daß ich mDelay nicht nutzen kann ist auch klar, aber wie siehts mit uDelay oder sDelay aus?

Moment da kommt mir ne Idee: Wenn ich einen Task mache und dessen Priorität auf 1 setzte und dafür sorge, daß der in (sagen wir mal) 0.2ms fertig ist und den SysTick auf 2ms stelle, dann hätte ich alle 2ms einen Taskaufruf aber Main hat selber noch 1.8ms für sich? Gleichzeitig sorge ich aber dafür, daß der Task 500x/Sekunde aufgerufen wird. Irgendwo ein Denkfehler?

Gruss
Harry

..... achja ich hatte noch ein etwas älteres CompilerManual :D
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 20.10.2018 - 18:48  ·  #7
Hallo harry
Vegesse nicht dass jeder task Wechsel viel zeit kostet und ein systick von 1msec auch viel rechenzeit pro Sekunde braucht. Hier ist ein gutes vorrauschauendes Multitasking Design notwendig
rolf
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Verständnisfrage zu Processen

 · 
Posted: 20.10.2018 - 19:13  ·  #8
Hallo Harry,

gegen Delays spricht in Prozessen nichts. Das sind doch nur Routinen,
die einem die Berechnung der NOP - Anzahl abnehmen und diese Anzahl
von NOPs dann ihrerseits von der CPU ausführen lassen.
Selbst lange mDelays in Prozessen werden halt nur immer wieder unterbrochen und
"bei nächster Gelegenheit" dann fortgesetzt. Sind dann halt ungenauer (länger).
Bei Taks gilt natürlich die oberste Maxime, dass diese in einem Tick fertig werden.

2ms Systick bringt halt mehr Verwaltungs-Overhead, sollte aber gerade noch OK sein.
Dass Main in deinem Beispiel dann 1,8ms bekommt stimmt natürlich nur, wenn sonst
keine Prozesse/Tasks definiert sind und man die Laufzeit vom Scheduler vernachlässigt

Gruß, Gunter

ich habe mir angewöhnt, die immer aktuellen Manuals in Start/Programme/AVRco zu
benutzen.
  • 1
  • 2
  • 3
  • 4
  • 5
  • Page 1 of 5
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   138   152 · Page-Gen-Time: 0.030111s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI