Forum: Mikrocontroller und Digitale Elektronik Problem mit unsigned long?


von chrigu (Gast)


Lesenswert?

Hallo,
ich programmiere den 68HC12 in C und habe folgendes Problem:
wenn ich alles in einer Zeile rechne, ist das resultat komplet falsch:

t_m = (DELTA_P_ER*REAL_LOOP/DELTA_L2_L1); // ergibt 0xfffffffd

wenn ich es aufteile, ergibt es das richtige resultat:
t_m = DELTA_P_ER;
t_m = t_m *REAL_LOOP;
t_m = t_m / DELTA_L2_L1; // ergibt 184

Definitionen:
unsigned long t_m;
#define DELTA_P_ER      0x3EF8
#define DELTA_L2_L1     0x2219
#define REAL_LOOP       100

Kann mir jemand sagen, wo hier das Problem liegt? Ist es nicht möglich,
das ganze in einer Zeile zu rechnen?
Besten Dank für eure Hilfe!

von Edd (Gast)


Lesenswert?

Hi,

interessant. beim GCC funktioniert der Codeausschnitt so wie Du ihn
gepostet hast, und es kommt 184 raus.
Ich vermute mal, dass Dein Compiler/Preprozessor für die Konstanten als
Datentyp unsigned short (16 bit) annimmt und damit rechnet. Bei der
Multiplikation gibt es dann einen Überlauf und der Wert stimmt nicht
mehr. Meine Theorie.
Versuch doch mal ein L hinter die Werte zu packen, also z.B.

#define DELTA_P_ER   0x3EF8L

Edd

von chrigu (Gast)


Lesenswert?

Hi Edd,
dein Tip war Gold wert.. ich musste hinter die Konstante ein L einfügen
und schon hat es geklappt!
Ich möchte mich für deine Hilfe herzlich bedanken.
Gruss Chrigu

von Edd (Gast)


Lesenswert?

Hi Chrigu,

kein Problem, es freut mich, dass ich helfen konnte.
Viel Erfolg weiterhin.

Edd

von Christian G. (Gast)


Lesenswert?

@Chrigu

Hi, was für einen Compiler benutzt du denn?
Cosmic, Metrowerks oder ... ?

Christian

von Steini (Gast)


Lesenswert?

Hallo,

habt ihr etwa auch HC12X Erfahrung?
Ich bin auf der Suche nach eine SCI-Anwendung als RS232.
Könnt ihr mir da weiterhelfen?

Danke...

Steini

von Christian G. (Gast)


Lesenswert?

Na klar,

was wolls denn sein?

Christian

von chrigu (Gast)


Lesenswert?

@ christian
der compiler heisst IAR 12
@Steini
was brauchst du denn genau, bzw. was für eine Anwendung möchtest du
programmieren?
Gruss chrigu

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.