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


von Andreas I. (adisan)


Angehängte Dateien:

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!

von Dieter W. (dds5)


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.

von holger (Gast)


Lesenswert?

>"Error [1300] stack frame too large".

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

von Andreas I. (adisan)


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?

von holger (Gast)


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] = ....

von Andreas I. (adisan)


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] = ....

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
Noch kein Account? Hier anmelden.