gcc kennt die "UART-Variablen" nicht

Gast #39283
hi,
ich programmiere schon seit einigen Jahren AVRs unter Asm, hab mir aber 
jetzt mal avrgcc installiert (nur so zum rumspielen). Jetzt zu meinem 
Problem: Ich habe mal einige Test-Anwendungen ausprobiert, die ersten 
(LEDs blicnken und so) funktionieren auch soweit ganz gut, wenn ich 
allerdings die uart nutzen will, klappt nix mehr :(

Der Compiler meldet immer (trotz Headerfiles eingebunden), dass 'UCR', 
'TXCIE', 'TXEN', ... nicht definiert seien!?!?

Ich hoffe ihr könnt mir helfen (zur Unterstützung hab ich mal meinen 
Soruce angefügt).

Gruß, Matthias

-----------------------------------

#include <io.h>
#include <interrupt.h>
#include <sig-avr.h>
#include <progmem.h>

char a[] __attribute__((progmem)) = "Dies ist eine Testnachricht!";

char pos = 0;

SIGNAL(SIG_UART_TRANS)
{
  if(pos++<28)
    outp(PRG_RDB(&a[pos]),UDR);  // nächstes Z.

}

int main(void)
{
  outp((1<<TXCIE)|(1<<TXEN),UCR); // Trans.-Interrupt
  outp(25,UBRR);                  // 4Mhz / 9600 Baud
  sei();                          // Interrupts an

  outp(PRG_RDB(&a[pos]),UDR);     // 1. Zeichen senden
  for(;;);                        // Endlosschleife
}
Gast
Erstens solltest Du besser eine aktuelle Version der Software
nehmen.  WinAVR ist hier die Waffe der Wahl, falls Du unter
Windows arbeitest.  Dort würde das #include <avr/io.h> heißen
und dieses ist dafür zuständig, die entsprechenden Definitionen
reinzuziehen.

Außerdem, wie compilierst Du das genau?  Ohne -mmcu=<MCU Typ>
kann es nicht funktionieren, denn nur darüber erfährt der
Compiler, welche Definitionen er einbinden soll.  Leider hat
Atmel für die AVRs keine einheitliche Notation für die IO-Register
geschaffen, die heißen bei unterschiedlichen Controllern auch
unterschiedlich.
Gast
ok, dann zieh ich mir winavr mal runter...

ist ein mega161, compilieren passt aber schon (denk ich), hmm mal sehen, 
vielleicht geht's mit winavr?!?!
Gast
Hallo Matthias,
bist du sicher, das im makefile nicht ein AVR eingetragen ist bei dem 
die Register anders heißen z.B. UCSRB.., Ansonsten sollte man auch zum 
rumspielen vielleicht lieber WINAVR nehmen UBRR = 25;  sieht doch schon 
besser aus :)
Gruß Bernhard
Gast
ok, alles klar, jetzt funktioniert's ;)

hatte den mega161 als ersatz für einen 8515, welche ja pinkompatibel 
sind, deswegen bin ich davon ausgegangen, dass alle programme (solange 
sie keine spezialfunktionen nutzen) auch ungeändert auf beiden laufen.

danke für die hilfe
gruß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.