krümel wrote:
> Das ganze ist ja nur mal eine Machbarkeitsstudie.
Zwischen machbar und sinnvoll gibt es leider oft große Unterschiede.
Du benutzt den externen Memory, also das LARGE Speichermodell. Damit
reduziert sich schonmal die Geschwindigkeit drastisch. Und 8051-er ohne
XDATA kannst Du damit garnicht verwenden.
Der 8051 ist eigentlich für Steuerungsaufgaben optimiert, d.h. daß man
möglichst alle Variablen im sauschnellen IDATA (max 256 Byte) hält.
Ich benutze den 8051 sehr gerne, weil der sehr viel kann, wenn man ihn
richtig programmiert. Ich mache daher alle Tasks in der Mainloop
hintereinander. Der Trick ist, daß jede Task selber zur Mainloop
zurückkehrt, wenn sie grad nichts zu tun hat. Damit brauche ich keinen
Scheduler und bin sauschnell. Außerdem brauche ich nicht die Übergabe
von Parametern kapseln, da ja immer die aktuelle Task vollen Zugriff
hat. Es kann also nicht passieren, daß ne andere Task nen
Mehrbyte-Parameter unterm Hintern wegändert (außer Interrupts).
Natürlich müssen sich dann manche Tasks merken, wo sie weitermachen
sollen, wenn sie auf ein Ereignis warten.
Klingt natürlich völlig unspannend und einfach und auch Zeit, SRAM und
Flash sparend diese Lösung, aber dafür funktioniert sie saugut.
Peter
P.S.:
Ich wil auch dem Compiler nicht ins Handwerk pfuschen, weil das oft
Ärger geben kann. Daher habe ich in nem C-Programm grundsätzlich Null
Assembler drin. Und damit bin ich immer gut gefahren.
Ich hab auch nicht die Zeit, mich mit dem Compiler-Internas zu
beschäftigen. Genau deshalb nehme ich ja C, um mir die ganze Low-Level
Arbeit zu sparen.