mikrocontroller.net

Forum: Compiler & IDEs AT90CAN32 avr-gcc: Groesse des RAMs angeben.


Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.
% avr-gcc --target-help

Target specific options:
...
  -minit-stack=STACK          Use STACK as the initial value of the stack
                              pointer
...

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmpf.  Möglicherweise ist die Option inzwischen wirklich überflüssig
geworden. :-(

OK, dann nimm

CFLAGS += -Wl,--defsym=__stack=XXXX

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.