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

Re: Threadpriorität abfragen Kategorie: Programmierung (von AndrĂ© H. - 14.01.2007 20:40)
Als Antwort auf Threadpriorität abfragen von Tinber - 13.01.2007 18:19
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0, OSOPT V3.1
Hallo Martin,

> Um an meiner bestehenden Regelung neue Funktionen zu testen habe ich in VBA einen Simulator gebastelt
> der z.B. die Temperatureingänge durch Werte ersetzt die über HWCOM gesendet werden.
> Zum testen verwende ich eine Unit mit Application Board, Programmseitig wird einfach der Thread
> in dem sich alle Hardwarefunktionen befinden im Main Modul angehalten.
>
> Jetzt zum Problem .
> Wenn im Simulatorbetrieb nach  setzen der Zeit pcf8583.syncpcf() ausgefĂĽhrt wird
> kommt es zu einer fehlfunktion, da ja pcf8583.init() in diesen Fall nicht ausgefĂĽhrt wird.
> Im Normalbetrieb soll die Zeit aber auch vom PC aus zu setzen sein in diesen
> Fall mu� ich um pcf8583.syncpcf() auszuführen vorher auswerten ob der Thread läuft oder steht Priorität 0,
> bzw. alternativ abfragen ob pcf8583.init() ausgefĂĽhrt wurde.
>

Ich verstehe Dein Problem nicht ganz.
Wenn Du irgendeine Funktion aus pcf8583.c2 aufrufen willst, muĂ?t Du immer
vorher pcf8583.init() aufrufen.
Die Funktion läuft eben leer durch, wenn kein Uhrenbaustein gefunden wurde.
Genauso die Funktion pcf8583.syncpcf().
Wenn Du aber pcf8583.init() nicht am Programmstart aufrufst, steht
die Subadresse fĂĽr den Uhrenbaustein auf 0.
Wenn Du nun am Application Board noch ein EEProm an Subadresse 0 hast (A0-A2 auf GND)
und der Uhrenbaustein normalerweise die Subadresse 1hat, wird das EEProm angesprochen.
(Der PCF8583 und I²C-Bus-EEproms teilen sich denselben Adressbereich)

Um auf Deine eigentliche Frage zurĂĽckzukommen:
Ja, es gibt eine Möglichkeit, festzustellen, ob ein bestimmter Thread läuft oder nicht.
Allerdings habe ich das noch nicht veröffentlicht.
Man muĂ? auf bestimmte Bereiche des RAMs zugreifen, in dem die Daten der Threads abgelegt sind.
Hat einen Satz von Daten, in dem u.a. die Thread-Priorität und die Position des nächsten
auszufĂĽhrenden VM-Codes steht.
Wenn ich es richtig im Kopf habe, belegt ein Datensatz 20Byte. Die RAM-Adressen
mĂĽsste ich nachsehen.

Aber das ist eigentlich nicht notwendig.
Benutze doch einfach eine Variable als Flag, welche Du zusammen mit starten bzw. Anhalten
des Threads mit einem Wert fĂĽllst.
Das ist auf jeden Fall viel einfacher, als die Prio eines Thread herauszufinden.
�ber die Variable kannst Du dann ganz einfach abfragen, ob der Thread läuft, oder nicht.

...
Flag=1;
run Threadname;
...
halt Threadname;
//reset Threadname;
Falg=0;
...


MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: