www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Keil --> IAR: Probleme mit dem Stack


Autor: Frank Büttner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe mit Keil ein kleines Testprogramm für einen 8051er geschrieben mit 
UART usw. und es funktioniert auch alles so wie es soll. Jetzt will ich 
das Programm nach IAR Workbench portieren um damit weiterarbeiten zu 
können (ist Vorgabe: ich muss das benutzen) und bekomme damit kleine 
Teile auch einfach zum laufen. Wenn ich aber das ganze Projekt 
kompiliieren will erscheint die folgende Fehlermeldung:
Error[e16]: Segment IDATA_I (size: 0x1be align: 0) is too long for segment definition. At least 0xdf more bytes needed. The problem occurred while
 ... und blabla

Habe hier im Forum schon gelesen, dass IDATA ein Teil des Stack ist. 
Offensichtlich ist dessen Größe mit aktuell 0x40 bei mit falsch 
eingestellt. Wie kriege ich raus, wie groß ich das stellen darf? Was 
passiert wenn ich es zu groß stelle? Was ich schon rausgefunden hab ist 
das mein controller max. 256byte Stack haben kann.

Wäre es nicht am einfachsten einfach zu schauen, wie es davor in Keil 
eingestellt war? Da hat es ja funktioniert. Leider steht bei den 
"Target-Optionen" bei Keil nix drin... nur "Use Memory Layout from 
Target Dialog", alle anderen Felder sind leer. Kann man das vielleicht 
aus der STARTUP.A51 irgendwie auslesen?


Für den Keil-Linker weiß ich, dass folgende Parameter richtig sind:
...\BL51.EXE RS(256) PL(68) PW(78)

für den Keil Compiler:
..\C51\DB OE

Kann mir jemand damit helfen???
Viele Grüße
Frank

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kuck mal in der Device-Datenbank bei eingestellten Device nach, wie der 
IDATA eingestellt ist. Bei Keil vermutlich auf 256. Dieses ergibt die 
Linkeroption RAMSIZE(256), steht in der Datei *.lnp! Prüfe auch mal die 
Speicherbelegung, steht ganz unten im *.lst File.

Was hast Du eigentlich für einen 8051? Wieviel internen RAM hat der?

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte meinen Stack immer überschrieben. Deshalb schau mal nach ob Du 
Daten im Stackspeicher ablegst

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Keil muß man die Größe des Stack im Startup.a51 einstellen. Da 
steht oft nur 1 drin, was natürlich zu wenig ist. Man sollte 16 
reinschreiben.

Wo der Stack liegt, kann man beim Keil aber nicht einstellen, er benutzt 
immer allen freien SRAM als Stack.
Erst, wenn das weniger als die eingestellte Menge wird, gibts ne 
Fehlermeldung.


Peter

Autor: Frank Büttner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

erstmal vielen Dank für die Antworten und Sorry, dass ich erst jetzt 
dieses Thema wieder auf weiterführe.

@Matthias:
Ich hab einen C8051F530 von Si-Labs. Das Ding hat 256 Byte RAM und 8KB 
Flash!

@Sebastian:
Wie schaut man das nach ob ich Daten in den Stackspeicher legen?

@Peter Dannegger:
Die Einstellung in Keil sind bei mir schon richtig! Der wurde quasi 
vorkonfiguriert installiert. Ich will die selben lauffähigen 
Einstellungen auch bei IAR schaffen!


Meine Einstellungen in IAR sehen im Moment so aus, wie auf diesem 
Screenshot dargestellt. Bei Bedarf kann ich noch weitere Screenshots 
machen von anderen Menüs, wenn das hilft!!

Viele Grüße
frank

Autor: Frank Büttner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich hab ein paar neue Infos zum Thema: nach vielfältigen Versuchen hab 
ich festgestellt, dass einzig und allein die Funktion printf() Probleme 
macht!

Meine kleine Software, welche mit Keil perfekt lief hat über printf den 
UART bedient. Sobald auch nur eine printf Anweisung in IAR drin steht 
und kompiliert werden soll läuft alles drunter und dürber und es 
entstehen dutzende Fehlermeldungen. Alles andere scheint gut zu laufen, 
auch mit anderen Bibliotheken wie math.h gibt es keine Probleme... ich 
kann Wurzeln ziehen wie ein Wilder!

Meine Vermutung ist jetzt: IAR ist an meinen Controller nicht so gut 
angepasst, dass ich printf ganz einfach so benutzen kann um Zeichen an 
den UART zu schreiben. Wäre schade, aber kein Beinbruch! Kann es sein, 
dass ich noch irgendwie einen UART-Handler oder sowas brauche, damit das 
auch in IAR geht??

Viele Grüße und Danke im voraus für alle Antworten
Frank

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.