mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Echtzeit Betriebsystem


Autor: monk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
Ich bin grad am Betriebsystem portieren. Ich habe mir gedacht den Stack
brauche ich doch nicht retten oder? da bei Atmegas genug gross ist kann
ich doch den Stack pointer so verbigen das eine neue gestartete Task
einen Bereichbekommt, wenn die Task beendet wird dann frei gegeben.
Also kurz gesagt ich Teile den Stack in Bereiche.

Autor: Roland Praml (pram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, jeder Prozess hat seinen eigenen Stack.

Beim Taskwechsel speicherst du alle Register in dem Stack des gerade
verlassenen Prozess, dann wechselst den Stackpointer zum nächsten
Prozess und holst die Register vom neuen Stack und verlässt den
Taskwechsel und der neue Prozess wird ausgeführt.

wenn du Beispielcode brauchst kann ich mal was suchen.

Gruß
Roland

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist eine nicht unübliche Vorgehensweise Stackframes für die Tasks.

Autor: monk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ok du ich rette eigentlich den ganzen prozess auf Ram aber den Stack
will ich dabei belassen. Ich will anders als OSII den hier wird nicht
nur der Prozess sondern auch der Stack mit in Ram gerttet wenn du etwas
brauchbare code hast dann hier damit.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob du die Stacks statisch allozierst, dynamisch, oder irgendwie den
"normalen" Stack zerschnipselst, das ist der Maschine egal.

Statische Speicherbelegung erleichtert freilich die Abschätzung der
benötigten Speicherkapazität, da der Linker die Grösse der
Speichersegmente anzeigen kann. Bei einer wie auch immer realisierten
dynamischen Allokation merkt man das erst zur Laufzeit.

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches Hardware oder Software System? Unter windows XP? ;-) (Gibts auch
und läuft recht gut)

Autor: monk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist doch egal um sich inspirieren zu lassen. Hauptsache gute ideen.

Autor: monk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja um dynamische Speichterverwaltung zu Programmieren gehört doch
einbißchen zu viel unter Umständen muss man dann schon bereits
existierende Stacks verschieben und wie du schon breits erwähnt hast
Laufzeit......Diese fehler kennen wir doch von einen gewissen
Betriebsystem oder? Ich mach was ganz einfachen mit einen kleinen
Scheduler und Kernel.

Autor: Roland Praml (pram)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab hier noch eine Version die ich dir schicken kann, weiß jetzt nicht
wie viele Fehler da noch drin sind ;-) aber als Inspiration kanns
vielleicht helfen.

Beginnen tust du so:
void Task1(void) {
for(;;) {
 mach irgendwas, gib den Task dann wieder mit usleep frei
}
}

void Task2(void) {
for(;;) {
 mach irgendwas, gib den Task dann wieder mit usleep frei
}

}
CreateTask(96, Task1); // Stack mit 96 Byte für Task1
CreateTask(64, Task2); // 64 Byte für Task2
StartTasks();

Da die Stackgrößen der einzelnen Tasks statisch fest gelegt werden ist
man halt relativ eingeschränkt, da die Sache abschmiert, wenn ein
Prozess zu viel Stack braucht.
Gruß
Roland

Autor: monk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau so hab ich auch angefangen vielen dank meine idee hat sich doch
bestätigt danke für den Code.

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.