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


von Christian W. (clupus)


Angehängte Dateien:

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.