Forum: Projekte & Code ASM-Scheduler ATmega162


von Christof Krüger (Gast)


Angehängte Dateien:

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.