2 Stimmen

in einer C-Funktion nicht den Wert 'true' zurückgeben können

Wenn Im versuchen, eine Eingabe 5-Byte-Array (p) gegen ein 5-Byte-Array in Flash (Daten) gespeichert zu überprüfen, mit der folgenden Funktion (e2CheckPINoverride), um einfach entweder einen wahren oder falschen Wert zurück. Aber es scheint, egal, was ich versuche, es gibt nur als 'false' zurück.

Ich rufe die Funktion hier auf:

if (e2CheckPINoverride(pinEntry) == 1){
  PTDD_PTDD1 = 1; 
}
else{
  PTDD_PTDD1 = 0; 
}

Hier ist die Funktion:

BYTE e2CheckPINoverride(BYTE *p)
{
    BYTE i;
    BYTE data[5];

if(e2Read(E2_ENABLECODE, data, 5)) {
    if(data[0] != p[0]) return FALSE;
    if(data[1] != p[1]) return FALSE;
    if(data[2] != p[2]) return FALSE;
    if(data[3] != p[3]) return FALSE;
    if(data[4] != p[4]) return FALSE;
}
return TRUE;
}

Ich habe bereits true und false in der Datei defines.h zugewiesen:

#ifndef TRUE
    #define TRUE ((UCHAR)1)
#endif

#ifndef FALSE
    #define FALSE ((UCHAR)0)
#endif

und wo

typedef unsigned char   UCHAR;

wenn ich Schritt durch den Code, führt es alle Prüfungen richtig, es in den richtigen Wert übergeben, vergleicht es richtig und bricht dann an der richtigen Stelle, aber ist nicht in der Lage, den Rückgabewert von true verarbeiten?

bitte helfen?

4voto

fmsf Punkte 35002
#define TRUE 1
#define FALSE 0

Vergessen Sie die unsigned char. Sie können mit der Prämisse gehen, dass in c 0 ist falsch alles andere ist wahr

2voto

Tuomas Pelkonen Punkte 7667

Wahrscheinlich wird das Ihr Problem nicht lösen, aber Sie sollten schreiben:

PTDD_PTDD1 = e2CheckPINoverride(pinEntry) ? 1 : 0;

Außerdem vermischen Sie BYTEs und UCHARs (auch wenn sie wahrscheinlich dasselbe sind)

1voto

David Gelhar Punkte 27707

Versuchen Sie, die Sache einzugrenzen, indem Sie auf das #define verzichten und einfach sagen

return 1;

Wenn das funktioniert, dann ist irgendetwas mit Ihren #define's nicht in Ordnung.

1voto

Martin Wickman Punkte 19017

Wenn Sie zurückkehren TRUE o FALSE sollten Sie auch auf sie achten. Umschreiben Sie die if Klausel wie diese:

   if (e2CheckPINoverride(pinEntry) == TRUE) { // instead of '== 1'

1voto

Jerry Coffin Punkte 452852

Meiner Meinung nach schaffen Sie damit eine Menge unnötiger Komplexität. Ich würde die Funktion etwa so schreiben:

int e2CheckPINoverride(BYTE *p) {
    BYTE data[5];

    return e2Read(E2_ENABLECODE, data, 5) && 
        data[0] == p[0] &&
        data[1] == p[1] &&
        data[2] == p[2] &&
        data[3] == p[3] &&
        data[4] == p[4];
}

Und die Vorwahl wird einfach:

PTDD_PTDD1 = e2CheckPINoverride(pinEntry);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X