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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.