www.mikrocontroller.net

Forum: Projekte & Code ASM-Scheduler ATmega162


Autor: Christof Krüger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe einen kleinen simplen Scheduler auf einem ATmega162
geschrieben.
Ich habe einen 32kB SRAM-Baustein als externen Speicher angeschlossen
und benutze diesen als eigentlichen "Arbeitsspeicher".
Der Scheduler erlaubt in seiner jetzigen Form die pseudoparallele
Ausführung von bis zu 8 Tasks, wobei jeder Task feste 4kB des externen
SRAMs zugeteilt bekommt. Das Scheduling erfolgt durch den Timer0
Overflow. Das Scheduling-Intervall kann mit der entsprechenden
Prescaling-Wahl beeinflußt werden.
Bei einem Task-Switch werden alle Register (inkl. Status Register), der
Stack-Pointer uns natürlich der Programmcounter gespeichert und danach
alle Register etc. vom nächsten Task geladen. Es ist ein einfacher
Round-Robin-Algorithmus, es werden also alle Tasks nacheinander
durchgegangen.
Ein Task-Switch dauert bei einer Taktfrequenz von 16MHz ca. 16µS.

Für extrem Zeitkritische Aufgaben ist so ein Scheduler natürlich nicht
geeignet, aber wenn es nicht auf die absolute Geschwindigkeit ankommt,
ist er sicherlich ganz praktisch. Ich will ihn irgendwann noch etwas
erweitern, so dass ein Task z.B. einen Interrupt-Handler registrieren
kann, oder aber dass sich ein Task freiwillig schlafen legt u.ä.

Ich kann keine Fehlerfreiheit beim Schedulen garantieren, hab das ganze
nur rudimentär getestet.
Tasks werden der übersichtlichkeit halber in einzelnen Dateien
abgespeichert. Als Beispiel sind zwei Tasks dabei, die zwei Pins auf
PortB abwechselnd an- und ausschalten. Die Tasks werden in der
tasks.asm "included". Die Hauptdatei ist die tasktest.asm.

Bin wür Wünsche und Anregungen offen!

Gruß,
 Christof

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.