Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

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.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB