Re: Compilerlogik unlogisch? Kategorie: Programmierung (von Detlef - 10.01.2009 10:17) | ||
Als Antwort auf Re: Compilerlogik unlogisch? von André H. - 9.01.2009 14:44 | ||
| ||
> Hallo Detlef, > > > folgende Logik will sich mir nicht erschlie�en: > > > > Sensor[pos] = (modul*15)+1-1+bit; > > > > In obiger Zeile könnte man meinen, das +1 und -1 ist überflüssig. Ist es auch, solange die Variable > > "modul" nicht "0" wird. Dann wird das Ergebnis nämlich auch 0 und nicht "bit" wie es mathematisch > > korrekt wäre und es auch erwartet wird. Füge ich +1und -1 ein, funktionierts. > > > > Kann das jemand erklären? > > Ich kann das leider nicht nachvollziehen. > Egal, ob mit oder ohne "+1-1", die Berechnung ist immer korrekt. > Welche Datentypen haben die von Dir verwendeten Variablen? > Evtl. hast Du auch ein kleines Testprogramm, bei dem der Fehler bei Dir auftritt. > Ansonsten werde ich Dir ohne weitere Infos leider nicht helfen können. > > MfG André H. > Hallo und vielen Dank für Eure Unterstützung. Anbei die komplette Funktion. Die Variablen in dieser Funktion sind vollständig vom Typ int. Eine logische Erklärung für das +1-1 konnt ich wirklich nicht finden, sonst hätt' ich das FORUM ja auch nicht bemüht. Also die Funktion ruft der Reihe nach alle bei der Initialisierung gefundenen Module auf, sucht nach aktivierten Eingängen und schreibt den gefundenen Eingang absolut in "Sensor", und zwar je nach Variable "tog" (kann 1 oder 0 werden) von 0 bis MaxEing oder von MaxEing nach MaxEing*2. Eine weitere Funktion, bedient von einem weiteren Thread, arbeitet dann den jeweils anderen Teil von Sensor ab. Allerdings bringt das 0-te Modul im Gegensatz zu den anderen Modulen keine Eingangssignale solange das +1-1 fehlt. Getestetes rudimentäres Testprogramm ist momentan schwierig. Habe meine Ersatz C-Control zerschossen (ging ganz leicht mit 12V auf einen Eingang) und die Haus Control mal testweise ausbauen birgt die Gefahr eines riesen �rgers mit meiner Family Viele Grü�e Detlef Globale Variable: byte Sensor[MaxEing*2]; // Sensorvorrat, Anzahl Eingänge pro Sequenz function readHaus(int modueb, byte tog) returns byte // (Moduluebersicht und Toggle) { int modul, bit, eingang; byte pos; modul=0; pos=0; if tog pos=MaxEing; while modueb // ... solange es nichtabgefragte Module gibt { if modueb%2 // ... gucken, ob das nächste da ist { eingang=dwmodule.getDIMM(modul); // ... dann deren Eingänge abfragen if eingang if eingang !=dwmodule.getDIMM(modul) // Sicherheitsabfrage nur wenn eingang=0; // positives Eingangssignal bit=0; while eingang // ... solange irgendwo ein Bit "high" ist { if eingang%2 // ... gucken ob das nächste "high" ist { Sensor[pos] = (modul*15)+1-1+bit; if pos < (MaxEing*(1+tog)) pos=pos+1; } bit=bit+1; // ... nächstes bit abfragen eingang = eingang shr 1; // ... nächsten Eingang abfragen } } modueb=modueb shr 1; // ... nächstes Modul abfragen if modueb%2 // ... gucken, ob das nächste da ist { eingang=dwmodule.getDigi(modul); // ... dann deren Eingänge abfragen if eingang if eingang !=dwmodule.getDigi(modul) // Sicherheitsabfrage nur wenn eingang=0; // positives Eingangssignal bit=0; while eingang // ... solange irgendwo ein Bit "high" ist { if eingang%2 // ... gucken ob das nächste "high" ist { Sensor[pos] = modul*15+3+bit; if pos < (MaxEing*(1+tog)) pos=pos+1; } bit=bit+1; // ... nächstes bit abfragen eingang = eingang shr 1; // ... nächsten Eingang abfragen } } modueb=modueb shr 1; // ... nächstes Modul abfragen modul=modul+1; // ... nächste Modulreihe befragen } Sensor[pos]=LEER; // ... Endwert in Sensor schreiben } | ||
Antwort schreiben Antworten: Re: Compilerlogik unlogisch? (von Detlef - 10.01.2009 11:40) Re: Compilerlogik unlogisch? (von reneforster - 13.01.2009 19:46) |