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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.