Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Heiko, > > > Was passiert eigentlich?, wenn ein Thread einen zweiten startet (Run), dieser 2. zählt z.B. von 0 bis 500. > > Nun stoppt ein anderer Thread den laufenden 2. bei einem Zählerstand von z.B. 100 (Halt). > > Wenn der 2. nun erneut gestartet wird (Run), zählt er dann bei 100 oder wird er komplett neu gestartet und > > der Zähler beginnt von vorn? > > Wenn ein Thread mittels <code>halt;</code> oder auch <code>run 0;</code>, was beides > identisch ist, angehalten wird, und dann wieder mit <code>run</code> größer 0 oder resume > "gestartet" wird, läuft er genau an der Stelle weiter, an der er angehalten wurde. > > > Ich denke mir (könnte man sicher auch mit einem kleinen Prog testen), da bei 'Halt' nur die Prio auf 0 > > gesetzt wird, er bei 100 weitermacht. > > Korrekt. > > > Wenn dem so ist, gibt es eine Möglichkeit einen Thread zu stoppen und komplett neu zu starten, > > so daß der Zähler neu gestartet wird? > > Dazu dient das Schlüsselwort <code>reset</code>. > Hierdurch wird der Thread zurückgesetzt. > Er wird aber nicht unbedingt angehalten, sondern auf die durch den Compiler > definierte Prio gesetzt. > D.h. bei Threads mit dem Namen "main" beträgt die Standard-Prio 32, bei allen anderen 0. > > > Kann man eigentlich prüfen, ob ein bestimmter Thread läuft und mit welcher Prio? > > Das ist möglich, aber derzeit noch zu umständlich. > Man muß zuerst die Threadnummer des Threads ermitteln. > Anschließend kann man kann man auf die Variablenbereich mit den Thread-Infos > zugreifen und das entsprechende Feld auslesen. > Dazu ist einiges an Kenntnisse der internen Offsets nötig. > > Aber mal sehen: > Im internen RAM(Segment 0) an 0xF924 befindet sich der RAM-Pointer > mit dem Offset der Daten des aktuellen Threads. > Die Thread-Daten bestehen aus einem Datensatz von je 20Byte. > Darin befindet sich an Offset 0 das Word für den Programmzähler (Offset VM-Code). > An Offset 2 sollte die Startadresse(W) des Thread-Stackpointers im RAM sein. > An Offset 4 des Thread-Stackpointer(W) selbst, an Offset 6(W) die Adresse des Capture-Flag > ab Offset 8 befinden sich zwei Long-Werte die mit "sleep" zu tun haben. > An Offset 16 befindet sich die Threadpriorität(B). > An Offset 17 die vorherige Priorität(B). > An Offset 18 und 19 zwei weitere Werte, die ich noch nicht ganz zuordnen konnte. ;-) > > Wichtig zu wissen wäre noch, daß im RAM (Segment 8) die Threaddaten ab Adresse 0 stehen sollten. > Man kann die Lesefunktionen des Moduls flash.c2 dazu mißbrauchen, die Daten zu lesen. > Um die Threadnummer herauszufinden, ohne die Threads im eigenen Programm durchzählen > zu müssen, kann man die Threadnummer des jeweils aktuell ausgeführten Threads ermitteln. > Dazu muß lediglich 0xF91A im internen RAM (Seg0) ausgelesen werden. > Um die Prio des aktuell ausgeführten Threads zu erfassen, muß an der in 0xF924 (Seg0) > gespeicherten Adresse für Segment 8 plus einem Offset von 16 lediglich > der Bytewert gelesen werden. > > Dies zu ein paar kleinen Intera des OS. > > MfG André H.