www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik preemptive scheduler


Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,

ich programmiere auf einem cc2431 mit 8051 CPU ohne betriebssystem.
habe mir einen scheduler nach dem round robin prinzip mit prioritäten 
gebaut.
bis jetzt laufen die tasks alle nicht-preemptive ab.
meine frage ist nun wie kompliziert das ist, preemptive scheduling zu 
realisieren??

also ich hätte gerne die funktionalitäten wie wait und notify.

gruß, jimbo

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"meine frage ist nun wie kompliziert das ist, preemptive scheduling zu
realisieren??"


Ist ganz simpel!!

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Scheduler ist simpel. Nicht so simpel könnte die Frage sein, ob dein 
Programm damit klarkommt. Immerhin muss dann der Zugriff auf gemeinsame 
Resourcen geklärt werden, bei kooperativen Scheduling erledigt sich das 
von selber.

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
echt simple?
ja das mit dem zugriff kann man ja recht einfach über semaphore machen.
hat da vielleicht jemand einen link zu einem beispiel?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wait und notify kannst du auch mit kooperativem scheduling kriegen. 
Musst nur sicherstellen, dass eine laufende Task ab und zu mal dem 
scheduler eine Chance gibt, d.h. ihn oft genug aufruft. Erspart dir die 
Problematik mit den Resourcen.

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo A.K.,

klingt gut!!!
mein haupt problem liegt aber darin:
runtask1(...){
request();                -----> hier wird ein weiterer task erstellt 
der das                                    ... 
paket versendet und test auf true setzt.
while(test != true);

}
nun müsste ja task1 den prozessor freigeben, so dass der andere task das 
paket versenden kann und die variable auf true setzen.

nun möchte gerne meinen scheduler einfach erweitern.
folgende änderungen müsste ich vornehmen:
-speichern des pc
-stackpointer
-stack ansich.

hoffe hab nichts vergessen.
mein problem ist nur, das ich sowas noch nie gemacht habe, deshalb wäre 
ich froh wenn du bzw. auch gerne jemand anderes ein kleines beispiel 
geben würde wie ich so etwas speichere bzw. wie man dabei vorgeht.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn bei Verwendung eines Schedulers immer noch eine Zeile
    while(test != true);
im Programm steht, hat jemand evtl. den Sinn eines RTOS nicht kapiert.
Soll heissen: Für sowas baut man Events und Semaphoren ein.

Aber wenn's denn sein soll:
    while (test != true) {
       yield();
    }
wobei "yield" eine Scheduler-Funktion ist, die die laufende Task hinten 
in die Warteschlange anhängt und die vorderste aktiviert.



Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
erstmal vielen dank.
sorry für die frage, aber wo genau finde ich dort das beispiel?

Autor: Max Dm (jimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat sich erledigt.
nochmals danke

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.