Forum: Mikrocontroller und Digitale Elektronik Frage zu einer bedingten Verknüpfung


von H. G. (ledi)


Lesenswert?

Hallo!

Ich möchte folgende Abfrage stellen:
1
if ((address_request == 2) && (EEPROM_read_value != 0xFF) && (EEPROM_read_value != 0xFE) )

Also:
Nur wenn address_request 2 ist und EEPROM_read_value einen Wert (außer 
0xFF oder 0xFE) hat, soll die if-Abfrage ausgeführt werden.

Und das macht sie leider nicht.

Wo liegt hier der Fehler?

Danke für Eure Hilfe!
von Hannes L. (hannes)


Lesenswert?

Verknüpfung?? - Oder Verzweigung?

...
von Hinz (Gast)


Lesenswert?

Hat dort vielleicht die Optimierung deines Compilers aufgeräumt. Aus 
einer Zeile Code ist das leider nicht erkennbar.

Mit der Formulierung
1
if ((address_request == 2) && ((EEPROM_read_value & 0xFE) != 0xFE)
passiert wahrscheinlich das Gleiche?
von Bernhard R. (barnyhh)


Lesenswert?

Wie sind die Variablen definiert, insbesondere EEPROM_read_value?

Bernhard
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

H. G. schrieb:
> Und das macht sie leider nicht.
Wie kommst du darauf?

Bernhard R. schrieb:
> Wie sind die Variablen definiert
Und: wo ist diese gepostete if-Abfrage im Sourcecode?
Wo werden die Variablen geändert?
Wie sieht der Rest vom Code aus?
von H. G. (ledi)


Lesenswert?

Hallo!

Ich hab das zwischenzeitlich anders gelöst!

Danke!
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

H. G. schrieb:
> Ich hab das zwischenzeitlich anders gelöst!
Schön.
Und wie?  :-/
von H. G. (ledi)


Lesenswert?

Ich habe die Art der Abfrage geändert, und frage gleich den EEPROM 
Inhalt ab. Ist dieser ungleich 0xFF, dann existiert eine weitere Adresse 
im EEPROM und darf abgefragt werden.
1
if ( (address_request == 2) && (eeprom_read_byte(EEPROM_read_address ) != 0xFF) )
2
                {
3
                  Cube_high_byte   = eeprom_read_byte(EEPROM_read_address);  // Read value from EEPROM (Cube highbyte)
4
                  EEPROM_read_address ++;
5
                  Cube_low_byte   = eeprom_read_byte(EEPROM_read_address);  // Read value from EEPROM (Cube lowbyte)
6
                  EEPROM_read_address ++;
7
8
                  EEPROM_read_value = eeprom_read_byte(EEPROM_read_address);  // Check the next value
9
                  // If this value == FF, no further address exist!
10
                  // If this value != FF, another addres exist!
11
12
                  change_TX_address(Cube_high_byte, Cube_low_byte);
13
                  change_RX0_address(Cube_high_byte, Cube_low_byte);
14
15
                  address_request = 0;
16
17
                  wdt_reset();              // reset watchdog
18
                }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.