Fehler beim Kompilieren von avr-gcc?

OP #421822
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
Angehängte Dateien:

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.