Hallo zusammen, habe ein paar AT90CAN32 verbaut. Leider unterstuetzt mein avr-gcc (4.1.0 bei debian) nicht exakt diesen uC, sondern den fast identischen AT90CAN128. AT90CAN32 und AT90CAN128 unterscheiden sich ausschliesslich in der Speichergroesse von Flash, RAM, und EEPROM. Code erzeugt fuer den AT90CAN128 laeuft also grundsaetzlich auf dem AT90CAN32. Nur bei C gibt es ein kleines Problem mit dem Stackpointer: avr-gcc setzt den Stackpointer ans Ende des RAMs. Wenn ich fuer den AT90CAN128 compiliere/linke, liegt das ausserhalb des gueltigen Bereiches fuer den AT90CAN32 und das Programm verreckt klaeglich bei einem RET. Ich frage mich nun, wie ich den Compiler/Linker dazu bringen kann, einfach weniger RAM anzunehmen und den Stackpointer entsprechend zu setzen. Wie kann ich sagen: Der RAM ist nur 2 KiByte (anstatt 8 KiBytes wie beim AT90CAN128 angenommen.) Ich moechte weiterhin ein nettes Makefile benutzen. Vielen Dank schon mal fuer die Hilfe! Thorsten
Thorsten wrote: > habe ein paar AT90CAN32 verbaut. Leider unterstuetzt mein avr-gcc > (4.1.0 bei debian) nicht exakt diesen uC, sondern den fast > identischen AT90CAN128. Dann patche ihn bitte entsprechend oder nerv' den Debian-Maintainer, dass er die Tools auf dem Laufenden hält. > Ich frage mich nun, wie ich den Compiler/Linker dazu bringen kann, > einfach weniger RAM anzunehmen und den Stackpointer entsprechend zu > setzen.
1 | % avr-gcc --target-help |
2 | |
3 | Target specific options: |
4 | ... |
5 | -minit-stack=STACK Use STACK as the initial value of the stack |
6 | pointer |
7 | ... |
Hallo, danke schonmal fuer die Hilfe. Scheinbar wird die Option aber ignoriert?! Habe CFLAGS += -minit-stack=0x4FF und testhalber auch zusaetzlich LDFAGS += -minit-stack=0x4FF ins Makefile gepackt. Sowohl beim Compilieren und beim Linken steht die Option drin. Eine Warnung deswegen wird nicht erzeugt. Hinterher finde ich im main.sym jedoch: 000010ff W __stack und im main.lss: 00000094 <__ctors_end>: 94: 11 24 eor r1, r1 96: 1f be out 0x3f, r1 ; 63 98: cf ef ldi r28, 0xFF ; 255 9a: d0 e1 ldi r29, 0x10 ; 16 9c: de bf out 0x3e, r29 ; 62 9e: cd bf out 0x3d, r28 ; 61 Wobei ja 3e und 3d der Stackpointer sind. Ergo: Die Option hatte keine Auswirkung? Natuerlich hab ich ein make clean vorher gemacht. Habe gerade noch planlos mit #define RAMEND 0x4ff und #define __stack 0x4ff rumgespielt, aber das hat auch nichts veraendert. Mail an den Maintainer geht dann noch raus, aber ich wuerde gerne bald doch ne Loesung finden. Any ideas? Danke und Gruss Thorsten
Hmpf. Möglicherweise ist die Option inzwischen wirklich überflüssig geworden. :-( OK, dann nimm CFLAGS += -Wl,--defsym=__stack=XXXX
Danke Jörg, das scheint zumindest im main.lss zu wirken. Ob's auf der Hardware laeuft, weiss ich in ein paar dutzend Minuten. Die anderen .sections fangen ja `von vorne' im RAM an. Sollte also keine Probleme geben, oder? Gibt es noch irgendwelche Besonderheiten, auf die ich jetzt achten muss? Nochmals danke, Mail an den maintainer ist uebrigens raus, Schoene Gruesse Thorsten
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.