mikrocontroller.net

Forum: Compiler & IDEs Fehler beim Kompilieren von avr-gcc?


Autor: Christian Wolf (clupus)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich habe den avr-gcc selber übersetzt.
Nun habe ich das Problem, dass ich ein kleines Programm übersetzen
will, das aber nicht das macht, was ich will. (vgl. hierzu auch der
Thread http://www.mikrocontroller.net/forum/read-2-430199.html).

Grob zusammengefasst geht es darum, dass ich den Zugriff auf die einer
Aufgabe (Knopf 1 und 2 mal hier) zugeordneten Register/Masken (DDR,
PORT, PIN, Zugriffsmaske) in Arrays definieren will. z.B.:

volatile uint8_t * const PORT_Knopf[2] = {&PORTD, &PORTD};
volatile uint8_t * const DDR_Knopf[2] = {&DDRD, &DDRD};
volatile uint8_t const N_Knopf[2] = {_BV(PD6), _BV(PD7)}; // Masken

nun müsste ich ja z.B. so zugreifen:

*PORT_Knopf[<Nummer>] |= N_Knopf[<Nummer>];

Das funktioniert auch, solange ich explizit die Nummer angebe. Dann
wird im Assembler die Sache mit in/out oder sbi/cbi Befehlen gelöst.

Wenn ich aber die Sache in eine Schleife packe, wird's komplizierter.
jetzt geht es nicht mehr so einfach. Genau genommen wird die
Adressierung jetzt indirekt vom GCC assembliert und der Chip tut dann
nicht was er tun soll. Er macht es einfach nicht. (PIN-Treiber sind
noch i.O., mit expliziter Angabe nachprüfbar. s.o.)

Ende der Zusammenfassung.

Nun habe ich vermutet, dass irgendwas mit der Adressierung nicht passt
und deshalb ein kleines Programm für i386-Architektur geschrieben, dass
möglichst mal den selben "Fehler" erzeugen soll, so dass ich eine
Fehlermeldung auf einer Konsole bekomme. Ergebnis: wenn ich den Code
1-zu-1 kopiere und noch einige Änderungen vornehme (Namen der Variablen
anpassen, Ausgabe auf Konsole, ...), kommt - wieder erwarten - das
heraus, was der µC tun soll.

Ich schließe daraus, dass der Code in Ordnung ist und der Fehler durch
die verschiedenen Versionen des GCC (avr-gcc unc [i386-]gcc)
hervorgerufen werden. Kann das sein? Insbesondere, dass das "nur"
hier auftritt, ich also sonst noch nicht wirklich so ein Problem
hatte?

Weiß jemand, was ich machen muss, um das Problem auf dem AVR zu
beheben? Würde es sich lohnen die Platine noch mal neu aufzureißen und
einen MAX ranzuhängen, damit ich Ausgaben auf ein serielles Terminal am
PC machen kann?

MfG
Christian

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.