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

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
Ich nutze:
C-Control II Station, OSOPT V3.0
> 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)