C18 PIC18F2550 UnSigned ist SIGNED, wieso?

OP #2448765
Lesenswert?

Egal was ich mache (2 Versionen, sie unten, eine ist auskommentiert), 
der Debugger macht alles als SIGNED, obwohl es als UNsigned deklariert 
wurde.
Wenn ich im Watchfenster die Variable rechtsklicke und auf Properties 
gehe, dann ist auch der Haken bei signed vorhanden.

Der Debugger erkennt sonst auch keine Fehler. Ich hab keinen Plan mehr 
woran das liegen könnte.

//-------------------------------------------

typedef union __varSINUS {
 unsigned short long LH;
 struct {
   unsigned char L1;
   unsigned char H1H2;
   unsigned char L2;
 };
} _varSINUS;

//-------------------------------------------

#pragma udata buffer_big //Sonder-RAM.

_varSINUS varSINUS[168]; //<= 1. Version, mit obigem typedef.

/* 2. Version, ohne typedef:
static union _varSINUS {
 unsigned short long LH;
   struct {
     unsigned char L1;
     unsigned char H1H2;
     unsigned char L2;
   };
} varSINUS[168];
*/

#pragma udata
#2448894
Lesenswert?

Andreas Bayer schrieb:
> Wenn ich in eine der Variablen ein 0x0F packe und 4x nach links shifte
> steht da -16 drin. Es müsste doch aber 0xF0 drin stehen.

Erm. dir ist schon klar, dass das korrekt ist? -16 ist nunmal dasselbe 
0xF0 (meint: Wird durch dasselbe Bitmuster gespeichert).

Dem Byte selber ist es egal, ob es signed, unsigned, oder meinetwegen 
zwei Dezimalstellen einer BCD-Darstellung enthält.
Das ist Interpretationssache des Codes aussenrum oder eben des 
Debuggers.
Gast #2448931
Lesenswert?

if(var < 0)
   writeUART("Compiler hat probleme mit den Datentypen");
else
   writeUART("Alles iO, Debugger hat Probleme mit dem Datentyp.");

alternativ kann man natürlich auch ein LED setzen. Oder noch lange 
rätselraten im Forum betreiben.
OP #2449090
Lesenswert?

Habs nach Deinem Tipp getestet, und die if-Anweisung wird nicht 
ausgeführt, also, alles o.k.:

unsigned char dum;

dum = 0x0F;
varSINUS[0].H1H2 = dum << 4;
if (varSINUS[0].H1H2 < 0) {
 Nop();
 Nop();
}

Wenn ich mit der Maus über varSINUS gehe, dann steht im ToolTip auch 
240. Nur im Watchfenster steht -16.

Dan habe ich mir ja umsonst Sorgen gemacht. Hatte so einen Anzeigefehler 
noch nie.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren