014
09.05.2014, 18:30 Uhr
Hans
Library Walker (Operator)
|
Hi,
ich fang mal von hinten an:
Zitat: |
Was ich noch nicht verstehe ist die Geschichte mit dem Register, wie sieht dies physikalisch aus?
|
Ein Register ist physikalisch gesehen eine Schaltung aus ein paar Transistoren und anderen Bauteilen. Diese Schaltung kann genau wie die Variablen vom Typ bool nur 2 Zustände annehmen, nämlich on und off oder deutsch, ein und aus. Das ist analog zu den Variablen wobei meisstens gilt: true <=> on oder ein false <=> off oder aus Eine weitere Besonderheit an einem Register ist, dass der Zustand nicht nur durch ein Programm geändert werden kann, sondern auch durch andere Elemente der Schaltung, in der Regel irgendwelche Sensoren. Ein Programm kann dann das Register abfragen und feststellen, ob sich an dessen Zustand was geändert hat, womit wir wieder bei dem Beispiel wären. Denn genau so ein Register wird sich hinter "port" verbergen.
Zitat: |
Es handelt sich um Speicherplatz, klar. Aber was ist mit "state", "newstate" und "oldstate".
|
Das sind Variablen.
Zitat: |
Der Status des Port wird in "state" an einen Platz des Registers geschrieben?
|
Nein anders herum: Der Zustand des Registers wird in die Variable "state" geschrieben.
Zitat: |
Was sind "old und newstate"? Klar es sind Zustände von "state" zu bestimmten Zeiten.
|
Nein, das sind Zustände von port. Und weil man einen alten mit einem neuen Zustand vergleichen will, nimmt man 2 Variablen.
Zitat: |
Aber was bedeutet des? Sind das benamte Zeiger zu "state"?
|
Nee, mit Zeigern haben wir in dieser Funktion nichts zu tun.
Zitat: |
Wie werden die verschiedenen Zustände von "port" in das Register geschrieben und wie erkannt was hinter "oldstate" oder "newstate" steht?
|
Wie schon geschrieben: Es ist anders herum. Das Register verbirgt sich hinter "port" und dessen Zustände werden in state, oldstate und newstate geschrieben.
Jetzt zum Programm
Zitat: |
Nun gehen wir von dem Fall aus "state" war "true". Port also "on"... if (state == true) { port.off(); //nun wird der Port "off" geschaltet
|
richtig.
Zitat: |
Es wird also erst int timeOut=0; //der Timer auf null gesetzt.
|
auch richtig.
Zitat: |
dann do{ newState=port.getState(); //der Status von "port" geholt, vermutlich noch nicht geändert, da Anlauf/Auslaufzeit
|
Ebenfalls richtig. An dieser Stelle, bzw. mit der Anweisung "do" ist bereits die Schleife gestartet, d.h. die Abfrage findet schon innerhalb der Schleife statt.
Zitat: |
und timeOut++; if (timeOut>1000) succsess=false; //die Schleife gestartet bis } while ( (oldState!=newState) || !success ); return sucess; //zur Abbruchbedingung... oldState!=newState //status von "port" hat sich geändert, Motor ist an- oder -ausgelaufen, also "oldstate" ungleich "newstate"
|
Auch korrekt; wobei der Motor ausgelaufen sein muss, wenn wir davon ausgehen, dass state==true gilt. Denn dann haben wir ihn ausgeschaltet.
Zitat: |
oder !success //nicht succsess, also "false", da Schleife 1000 mal durchgelaufen....
|
Ich glaube, jetzt hast Du es so halbwegs verstanden, aber reichlich unglücklich kommentiert. Mir ist übrigens gerade erst aufgefallen, dass man "state" gar nicht braucht, sondern mit "oldstate" und "newstate" auskommt. Die Frage ist jetzt, was in der if-zeile stehen muss, die entscheidet, ob der Motor ein oder ausgeschaltet wird?
Und Du hast meine Frage aus Post 012 nicht beantwortet, nämlich ob Du mit dem "Paralleluniversum" UML meinst oder nicht? Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 09.05.2014 um 18:37 Uhr von Hans editiert. |