www.mikrocontroller.net

Forum: Compiler & IDEs Ansatz für einen Scheduler


Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich will einen Scheduler probieren und suche dazu nach einem Ansatz. 
Keine Fertiglösungen.

Das ganze stell ich mir so vor: Ein Timerinterrupt speichert die 
aktuelle Position im Programm und alle Register und wechselt zum 
nächsten Task.

Ist dieser Ansatz praktikabel? Wenn nein, warum nicht?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ist praktikabel. Jedes preemptive RTOS arbeitet so, wobei die meist 
auch andere Interrupts dafür nutzen können.

Den so gerne im Detail steckenden Teufel wirst du dann allerdings erst 
so richtig kennenlernen. Sagen dir die Begriffe "Semaphore" und 
"atomarer Datenzugriff" etwas?

Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, aber wikipedia ist mein Freund :)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alan wrote:

> Ist dieser Ansatz praktikabel? Wenn nein, warum nicht?

Praktikabel wofür?

Wenn Du nur zeitgesteuerte Funktionen aufrufen willst, geht das 
wesentlich einfacher und resourcenschonender.


Wenn Du echtes Multitasking (wozu braucht man das schon?) machen willst, 
dann ja.

Allerdings mußt Du dazu in die Untiefen Deines C-Compilers abtauchen, 
damit ihr euch nicht gegenseitig den Speicher überschreibt.
In jedem Fall brauchst Du massig RAM, da ja jede Task ihren eigenen 
Stack benötigt.
Und ordentlich MIPS in der CPU, so ein Taskswitching braucht ja massig 
Rechenleistung.
Und weiter gehts mit der Peripherie (Timer, Portpins, I2C, SPI usw.), 
die darf ja ne Task dann nicht mehr so einfach direkt ansprechen, immer 
schön ordentlich über Devicetreiber, sonst krachts gewaltig.
Globale Variablen gibts dann auch nicht mehr.


Peter

Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reicht nen Atmgea8 @ 4MHz?

Autor: yxz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Alan:
Wie Peter oben schon gesagt hat kommt es darauf an, was Du wirklich 
willst.
Nur einen Scheduler selbst programmieren, um das Prinzip zu verstehen ?
Oder willst Du echtes Multitasking auf einem µC haben, weil Du mehrere 
Programme "gleichzeitig" laufen lassen willst ?
Im ersteren Falle kannst Du's mit dem Mega8 probieren und verschiedene 
LEDs oder so "gleichzeitig" blinken lassen.
Im letzteren Falle muß Dir klar sein wie groß Deine Programme die 
"gleichzeitig" laufen sollen sein werden.
Von der Synchronisierung der einzelnen Prozesse/Tasks mal ganz 
abgesehen.
Viel Spaß beim proggen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alan wrote:
> Reicht nen Atmgea8 @ 4MHz?

Reicht wofür?

Multitasking macht man seit es Rechner gibt.
Allerdings hat zu Anfang ein Taskswitching (Wechseln des 
Lochkartenstapels) ganz schön lange gedauert.


Peter

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger wrote:

> In jedem Fall brauchst Du massig RAM,

Wenn du die zu 2/3 belegten 2KB eines Mega32 für 5 Tasks als massig 
ansiehst...

> Und ordentlich MIPS in der CPU, so ein Taskswitching braucht ja massig
> Rechenleistung.

Ein AVR Interrupt-Handler sichert locker seine 10-20 Register weg, wenn 
er nicht nur aus ein paar Befehlen besteht. Mit Taskswitcher sind es 
dann gegen 40. Viel mehr ist es nicht.

> Und weiter gehts mit der Peripherie (Timer, Portpins, I2C, SPI usw.),
> die darf ja ne Task dann nicht mehr so einfach direkt ansprechen, immer
> schön ordentlich über Devicetreiber, sonst krachts gewaltig.

Da verwechselst du einen einfachen Taskswitcher / ein einfachst-RTOS mit 
einem kompletten Betriebssystem.

> Globale Variablen gibts dann auch nicht mehr.

Dito. Wobei sich übrigens shared memory auch bei grossen 
Betriebssystemen einer gewissen Beliebtheit erfreut.

Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soll nur zu edukationellen Zwecken dienen.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für edukative Zwecke, um mit beispielsweise 3 Tasks ein paar Licher 
blinken zu lassen, oder ähnlich komplexe Aufgaben, wird ein Mega8 
ausreichen.

Das in Assembler (für C Anwendungen) geschriebene einfache RTOS AvrX 
verbrät selber um die 1,5KB. In C geschrieben wird es allerdings etwas 
voluminöser, da wäre ein 16KB Gerät möglicherweise sinnvoller.

Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Können wir jetzt mal zur Sache kommen? Der Scheduler soll mit GCC 
realisiert werden. Wie kann ich die Stelle, an der sich das Programm 
befand speichern?

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Return-Adresse steht im Interrupt auf dem Stack. Bis ATmega128 sind 
das 2 Bytes, darüber 3 Bytes.

Einen Zahn will ich dir vorsorglich gleich ziehen: Ganz in reinem C, 
ohne Assembler-Einsprengsel, ist das nicht realisierbar.

Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was sind diese ASM-Artefakte? Wenns nicht mehr als nen rjmp o.ä. 
ists nicht schlimm.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was du suchst ist hier:

http://www.avrfreaks.net/index.php?module=FreaksAr...

Letzter Artikel: "Multitasking on an AVR"

Ist verständlich geschrieben, wenn man englisch kann.

Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jup, scheint nicht übel zu sein, werde ich morgen mal genauer lesen :)

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.