mikrocontroller.net

Forum: Compiler & IDEs Präprozessor #if Problem


Autor: Marcus Maul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

der folgende Code arbeitet auf dem IAR-Compiler problemlos, wird aber
anscheinend von dem avr-gcc nicht verstanden.

IAAR:
Char receiveed @ 15;

gcc:
#define received _SFR_IO8(0x15);

Ist diese Aussage wirklich identisch?
Eine Besonderheit des Tiny26 ist, das man dieses Register direkt
auslesen muß und es nicht gepuffert wird.

Bei den Präprozessordirektiven funktionieren anscheinend die folgenden
Definitionen so einfach nicht. TIMER0_SEED0 hat immer den Wert 251,
egal was ich für System_Clock und Baudrate einträge.

#define USI_COUNTER_MAX_COUNT     16
#define USI_COUNTER_SEED_TRANSMIT (USI_COUNTER_MAX_COUNT - HALF_FRAME)
#define INTERRUPT_STARTUP_DELAY   (0x11 / TIMER_PRESCALER)
#define TIMER0_SEED               (256 - ( (SYSTEM_CLOCK / BAUDRATE) /
TIMER_PRESCALER ))

#if ( (( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ) * 3/2) > (256 -
INTERRUPT_STARTUP_DELAY) )
    #define INITIAL_TIMER0_SEED       ( 256 - (( (SYSTEM_CLOCK /
BAUDRATE) / TIMER_PRESCALER ) * 1/2) )
    #define USI_COUNTER_SEED_RECEIVE  ( USI_COUNTER_MAX_COUNT -
(START_BIT + DATA_BITS) )
#else
    #define INITIAL_TIMER0_SEED       ( 256 - (( (SYSTEM_CLOCK /
BAUDRATE) / TIMER_PRESCALER ) * 3/2) )
    #define USI_COUNTER_SEED_RECEIVE  (USI_COUNTER_MAX_COUNT -
DATA_BITS)
#endif

#define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1 )
#if ( UART_RX_BUFFER_SIZE & UART_RX_BUFFER_MASK )
    #error RX buffer size is not a power of 2
#endif

Danke für Eure Hilfe !!

Gruß

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Char receiveed @ 15;

Keine Ahnung, was das beim IAR macht.

> #define received _SFR_IO8(0x15);

Ich denke, daß Du zumindest 15 vs. 0x15 vermasselt hast.

Warum muß man das eigentlich so umständlich machen, warum kannst Du
nicht einfach USIDR benutzen, wie's in der Headerdatei deklariert
ist?

> Eine Besonderheit des Tiny26 ist, das man dieses Register direkt
> auslesen muß und es nicht gepuffert wird.

Das ist dem Compiler doch aber wurscht.

> #define INTERRUPT_STARTUP_DELAY ...

Das mußt Du vermutlich anpassen.  Sieht mir so aus, als hätte da
jemand den Overhead des Prologs der ISR manuell ausgezählt und
hinterlegt.

Die anderen #defines sind erstens so gruselig umgebrochen, daß man sie
nicht mehr durch den CPP ziehen kann, außerdem fehlt die Hälfte.
Bedenke, daß Du u. U. die Konstanten als unsigned long deklarieren
mußt (...UL), damit die Präprozessorarithmetik wie gewünscht
funktioniert.

Autor: Marcus Maul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

erstmal Danke für Deine Antwort und Deine Hilfe!

Sobald ich hier meine geätzte Platine durchgemessen habe, gebe ich mich
an Deine Vorschläge.

Wer das so verbockt hat?
Leute, die den IAR auswendig kenne und meinten die Appnote 307 zu
schreiben.

Mein Versuch USIDR zu benutzen half leider nicht.
Warscheinlich darf ich den ganzen Kram selbst neu "verbrechen", damit
funktioniert. ist mir bei dem LCD und dem Interrupt Beispielen auch so
gegangen. Der meiste App Code funktioniert leider nichtmal mit dem IAR
auf dem tiny26. Viele Sachen dürfen anscheinend nicht umkopiert
werden.

Meld mich, sobald ich wieder ein paar Schritte weiter bin

Danke Marcus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.