mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit C18 compiler von Microchip


Autor: Andreas I. (adisan)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ich wollte heute ein Programm für Temperaturberechnung in C18 schreiben 
für den PIC18. Hab mir die Student Version geholt und installiert.
Nur mit dem C18 hab ich Problem wenn ein DoppeltArray mit 100 
Speicherbereiche defenieren will, spuckt mir Compiler ein Fehlermeldung 
"Error [1300] stack frame too large".
Hat jemand damit Erfahrung?  Kann es vielleicht wegen Demoversion sein?
Ein Teil meines Codes  finden Sie im Anhang.

Danke!

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kann es vielleicht wegen Demoversion sein?

Nö, definitiv nicht. Die Demo arbeitet für 30 Tage wie die gekaufte 
Version und danach lassen sich nur die höheren Optimierungsstufen nicht 
mehr nutzen.

Die Fehlermeldung sieht für mich eher danach aus, als ob für das Array 
nicht genügend Speicherbereich verfügbar ist.
Vielleicht mal mit Speichermodell large probieren.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>"Error [1300] stack frame too large".

Da hat er wohl recht. Dein Array ist immerhin 800 Bytes groß ;)

Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger wrote:
>>"Error [1300] stack frame too large".
>
> Da hat er wohl recht. Dein Array ist immerhin 800 Bytes groß ;)



Und was heisst es 800 Byte, das ist doch gar nichts. Wieso funktioniert 
es dann mit CCS compiler? Können Sie mir sagen was ich machen soll?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Und was heisst es 800 Byte, das ist doch gar nichts. Wieso funktioniert
>es dann mit CCS compiler? Können Sie mir sagen was ich machen soll?

1. Bleib bei CCS ?
2. Array nicht lokal in der Funktion anlegen, sonst landet es auf dem 
Stack
3. Array global im RAM anlegen (wird auch nicht klappen wegen des 
Standard Linkerscripts, es sei denn du änderst es)
4. Wenn Array konstante Werte enthält einfach ins Flash legen

const rom float  utab[100][2] = ....

Autor: Andreas I. (adisan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank.

Das Problem habe ich gelöst indem ich alle Werte als Globalvariable 
defeniert habe.

holger wrote:
>>Und was heisst es 800 Byte, das ist doch gar nichts. Wieso funktioniert
>>es dann mit CCS compiler? Können Sie mir sagen was ich machen soll?
>
> 1. Bleib bei CCS ?
> 2. Array nicht lokal in der Funktion anlegen, sonst landet es auf dem
> Stack
> 3. Array global im RAM anlegen (wird auch nicht klappen wegen des
> Standard Linkerscripts, es sei denn du änderst es)
> 4. Wenn Array konstante Werte enthält einfach ins Flash legen
>
> const rom float  utab[100][2] = ....

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.