IAR vs. GCC

Gast #441048
Lesenswert?
• ▲
▼
Hallo,

ich versuche gerade auf einem ATtiny45 mithilfe dem USI eine serielle 
Schnittstelle ans laufen zu bekommen. Beschrieben ist das in der Appnote 
AVR307 von Atmel.
Die Software ist allerdings für einen ATtiny26 und den IAR Compiler 
geschrieben.

Jetzt habe ich die Software soweit umgeschrieben, nur laufen tut sie 
noch nicht so recht. Ich habe noch mit Timingproblemen zu kämpfen.

Nachdem 5 Bits über das USI Schieberegister ausgegeben wurden, muss 
dieses nachgeladen werden. Genau an dieser Stelle benötigt das Programm, 
je nach Optimierungseinstellungen, unterschiedlich lange.

In der Software für den IAR Compiler ist eine Zeile die da heisst:

__no_init __regvar static unsigned char USI_UART_TxData @ 15;   // Tells 
the compiler to store the byte to be transmitted in registry.

Gibt es für den GCC auch einen Befehl, der ihn veranlasst die Variable 
in einem Register zu halten? Wenn ja wie heisst dieser?

Falls sonst evtl. schon jemand ähnlich Probleme mit dieser Appnote hatte 
sind Vorschläge natürlich immer Willkommen.

Den Quellcode habe ich auch mal noch angehängt.

Danke, Christof
Gast #441122
Lesenswert?
• ▲
▼
Danke für den Hinweis. So wie es aussieht steht dass noch nicht im 
Tutorial.
Mein code tut zwar immer noch nicht, aber zumindest weiss ich nun wie 
man Variablen in Registern hält.

Grüße,
Christof
Gast #441150
Lesenswert?
• ▲
▼
>Nachdem 5 Bits über das USI Schieberegister ausgegeben wurden, muss
>dieses nachgeladen werden. Genau an dieser Stelle benötigt das Programm,
>je nach Optimierungseinstellungen, unterschiedlich lange.

welche Ausgabegeschwindigkeit willst du den realisieren, daß Dir dies 
auf die Füße fällt?.
Gast #441166
Lesenswert?
• ▲
▼
9600 Baud.
Sollte laut Appnote auch gut machbar sein. Das Problem ist auch nicht, 
dass er da ein oder zwei µs länger braucht sondern zwischen etwa 100 und 
300µs.
Irgendwo scheint ihm da ein Interrupt verloren zu gehen.
Gast #441279
Lesenswert?
• ▲
▼
ich hatte mal gelesen daß man z.B. mit

register int a

veranlassen kann, daß die Variable a in einem Register gehalten wird - 
aber ich glaube der gcc interpretiert das nur als einen "Vorschlag" - 
mit geringerer Priorität als seine eigenen "Ideen".

Erinnere ich mich recht, so wurde mein "Vorschlag" vom gcc übergangen 
:-)
Gast #441358
Lesenswert?
• ▲
▼
Habs rausbekommen.
Da die Pinchange interrupts nicht nur auf RxD sondern auch auf TxD 
freigegeben waren, hat er sich beim Senden selber unterbrochen. Seltsam 
ist nur, dass die im Originalcode auch freigegeben sind. Muss mir das 
morgen nochmal genauer anschauen was Atmel sich dabei gedacht hat. Ich 
poste dann auch noch den funktionsfähigen code.

Danke für die Anregungen,
Christof

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.