AT90CAN32 avr-gcc: Groesse des RAMs angeben.

Gast #478886
Lesenswert?
• ▲
▼
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
Moderator Persönliche Seite #478912
Lesenswert?
• ▲
▼
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
...
Gast #478932
Lesenswert?
• ▲
▼
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
Gast #478958
Lesenswert?
• ▲
▼
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

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.