PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Größe eines Programmes unter MPLAB ermitteln



SteffenJ
27.06.2006, 08:22
Hallo zusammen,

gibt es eine Möglichkeit die Grösse eines PIC Programmes unter MPLAB 7.4 mit dem C18 Compiler herauszufinden?
Der Hintergrund ist, dass wenn ich mein geschriebenes Programm kompiliere, er mit der Fehlermeldung

Error - section '.code_log.o' can not fit the section. Section '.code_log.o' length=0x000004fa

abbricht.
Stelle ich dagegen im Compiler alle Optimierungen an, dann kompiliert er es anstandslos. Die Frage ist, wieviel Speicherplatz habe ich noch nach dem Kompilieren zur Verfügung? Ich muss noch einige Routinen zusätzlich einbauen...
Falls der Platz nicht reicht, gibt es eine Möglichkeit, den Programmspeicher des PIC18F452 zu erweitern? Oder welchen "größeren" PIC könnte ich nehmen?

Viele Grüße
SteffenJ

EinsamerUser
29.06.2006, 09:46
Wenn der Compiler durchläuft, dann findest du unter View -> Memory Usage Gauge eine Anzeige.

Meines wissens zeigt dir der Compiler auch so etwas in dieser Art (im Output Fenster in der Registerkarte Build) an:

Memory Usage Map:

Program ROM $0000 - $0006 $0007 ( 7) words
Program ROM $0773 - $07FF $008D ( 141) words
$0094 ( 148) words total Program ROM

Bank 0 RAM $0020 - $0025 $0006 ( 6) bytes
Bank 0 RAM $0070 - $0070 $0001 ( 1) bytes
$0007 ( 7) bytes total Bank 0 RAM


Program statistics:

Total ROM used 148 words (3.6%)
Total RAM used 7 bytes (2.7%)

Tut er leider auch nur nach dem erfolgreichen compilieren.

desweiteren gibts auch noch die möglichkeit map-Files generieren zu lassen: Project -> Build options -> Project -> Linker -> Generate Map files

Zu deinem Problem:

Hast du irgendwo (z.B. im Linkerscriptfile falls vorhanden) eine Section angelegt, in der der Code hin soll??? Bzw. ist dein "code_log" das einzige File?


Gruß
Stefan

SteffenJ
29.06.2006, 10:25
Hallo Stefan,

vielen Dank für Deine Antwort.

Hab jetzt gleich mal die von Dir angesprochenen Dinge nachgeschaut:

Memory Usage Map: wird nicht im Build Fenster angezeigt, nur ob Fehler aufgetreten sind oder nicht

View->Memory Usage Gauge: funktioniert, so hab ich wenigstens einen groben Überblick über den Speicherverbrauch

Map Files: funktioniert, muss mich da nur erstmal reinpfriemeln, was das alles bedeutet. Wenn bei mir der oben genannte Fehler auftrat, wurde das Mapfile ja nur bis zum Fehler geschrieben.
Die Größe im Mapfile wird mit
27349 out of 33048 program addresses used, program memory utilization is 82%
angegeben. Nach der Optimierung durch den Compiler. Das heisst ja dann, dass ich mich mit der Programmierung beeilen muss, bis diese Optimierung in der Testversion abgeschalten wird...

>Hast du irgendwo (z.B. im Linkerscriptfile falls vorhanden) eine Section >angelegt, in der der Code hin soll??? Bzw. ist dein "code_log" das einzige >File?

Als Linkerscript nehme ich das 18f452.lkr von MPLAB. Da steht nichts von Code oder Data drin.
Ansonsten weiss ich jetzt nicht, was Du damit meinst, aber ich hab mal meine pragmas abgeschrieben. Das sind doch die einzelnen Code-Sektionen, oder?

#pragma code highVector=0x08
#pragma interrupt TimerISR
#pragma code
#pragma config

Grüsse
Steffen

EinsamerUser
29.06.2006, 15:54
Als Linkerscript nehme ich das 18f452.lkr von MPLAB. Da steht nichts von Code oder Data drin.
Ansonsten weiss ich jetzt nicht, was Du damit meinst, aber ich hab mal meine pragmas abgeschrieben. Das sind doch die einzelnen Code-Sektionen, oder?

#pragma code highVector=0x08
#pragma interrupt TimerISR
#pragma code
#pragma config


jap das sind die, die ich meine....kontrollier da mal alle, ob da nicht irgendeine Sektion zu groß wird. Steht glaub ich im MAP-File wie groß die einzelnen Sektionen sind....ansonsten kann ich dir weiter auch nicht helfen. Ich hab zwar glaub ich schonmal ne Program memory utilization > 82% gehabt....ober noch nicht solche Probleme.
Liegt vielleicht auch daran, das ich eigentlich immer sehr "viele" einzelne Dateien habe.
Versuch doch einfach mal ein teil deiner code_log.c aus zu lagern z.B. code_log1.c und code_log2.c o.ä.

Gruß
Stefan

SteffenJ
30.06.2006, 08:30
Hallo,

Habe jetzt ins Map-File geschaut und sehe auch die Größe der einzelnen Sektionen. Nur weiss ich nicht, wie mir das helfen soll, eine bestimmte Sektion kleiner zu machen. Vielleicht ist der Code auch einfach so groß, da ich sehr viele trigonometrische Funktionen drin habe.
Aber noch eine andere Frage:
Welches wäre denn der nächstgrößere pinkompatible PIC zum 18F452? Ich brauche nur mehr Programmspeicher, Datenspeicher ist erst zu ca. 30% ausgelastet.

Viele Grüsse
SteffenJ

EinsamerUser
30.06.2006, 12:35
ich kann dir jetzt direkt keine controller vorschlagen, da ich auch erst nachschaun müsste....

Aber geh einfach mal auf die Seite von Microchip (PIC18 Product-page) (http://www.microchip.com/ParamChartSearch/chart.aspx?branchID=1004&mid=10&lang=en&pageId=74) schau da mal nach. Der PIC, der mehr Speicher hat und den es auch in deiner Gehäuseform gibt, der "müsste" auch PIN-Kompatibel sein.

Gruß
Stefan

SteffenJ
30.06.2006, 14:03
Vielen Dank für Deine Auskunft. Werd mich dann mal genauer unter den 3 Milliarden ;-) PICs umschauen, damit ich den richtigen erwische.

Grüsse
Steffen