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 | ||
| ||
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: |