Forum: Compiler & IDEs Problem mit Konstante bei dem Macro


von lhend (Gast)


Lesenswert?

18 Jul 2007 14:03   Problem in macro value generation

Hallo zusammen,

ich benutze C30 compiler für dsPIC30 (ich glaube dass es grundsätzlich 
gcc oder?)
ich habe Problem als ich diese macro automatisch gemacht habe:

#define XTAL                7500000U
#define PLL_MULTIPLIER      8U
#define CLOCK_POSTSCALER    1U
#define F_OSC               (XTAL * PLL_MULTIPLIER)/CLOCK_POSTSCALER
#define FCY                 F_OSC/4U
#define UART_BAUD           9600U
#define UART1_BRG           (FCY/(16U * UART_BAUD) - 1U)


ich habe dafür erwartet:

UART1BRG = (UINT16) (((7.5M*8/4)/(16*9600)) - 1) (= ca. 97 )


aber was ich für mein UART baud rate register bekommen habe, ist immer 
0x298 (664 decimal)?

Warum ist das so?

Danke für die Hilfe.

von Klaus F. (kfalser)


Lesenswert?

#define XTAL                7500000UL
#define F_OSC               ((XTAL * PLL_MULTIPLIER)/CLOCK_POSTSCALER)
#define FCY                 (F_OSC/4U)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> ich glaube dass es grundsätzlich
> gcc oder?

Nein.

von lhend (Gast)


Lesenswert?

Ich habe die Lösung gefunden, man muss "UL" (unsigned long) benutzen. 
Die folgende Kode funktionert bei mir:

#define XTAL                7500000UL
#define PLL_MULTIPLIER      16UL
#define CLOCK_POSTSCALER    1UL
#define F_OSC               ((XTAL * PLL_MULTIPLIER)/CLOCK_POSTSCALER)
#define FCY                 (F_OSC/4UL)
#define UART_BAUD           9600UL
#define UART1_BRG           (UINT16) ((FCY/(16UL * UART_BAUD)) - 1UL)

Ich habe gedacht dass der Kompiler ein variant von gcc war.

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.