Forum: Mikrocontroller und Digitale Elektronik Speichergröße PICs


von Sven (Gast)


Lesenswert?

Hallo,
ich muß noch einmal ne ganz dumme Frage stellen:
Wieviel Programm passt in einen Pic?   :-)

Ich habe ein Programm geschrieben, was immer größer wurde. Zuerst
passte es nicht mehr auf einen 16F84, dann bin ich auf den 16F628
ausgewichen, der ja 2048*14 bit orientiert ist. Für mein .hex-File sehe
ich eine Größe (in den Eigenschaften des Windoofs-Explorer) von 2633
Bytes. Nach einer ähnlichen Frage, die ich hier schonmal stellte und
den Antworten darauf dachte ich:

2633 Byte * 8 bit (PC-Format)= 21064 bit (wurde mir hier damals so
vorgerechnet....)

21064 / 14 bit (PIC-Format) = 1504 Byte im Pic-Format. Aber auch in
diesen PIC mit 2k Speicher passt das Proggi nicht mehr, ich nehm jetzt
den 16f873.

Wo ist da mein Denkfehler??

Tschöö Sven

von Chris (Gast)


Lesenswert?

Hallo,

kann es sein, daß beim PIC die Befehle 14 Bit breit sind? Das müßte
doch im Datenblatt stehen, unter Programmspeicher. Demnach passen beim
16F628 nur 2048 Befehle in den Programmspeicher. Die Codegröße=Anzahl
der Befehle müßte doch der Assembler oder Compiler angeben.

Gruß

von leo9 (Gast)


Lesenswert?

doppelt posten gilt nicht ;-)

ich nehme an dass dein *.hex File kein hex-File ist. Beim Hexformat
werden die Bytes im "Klartext" gespeichert (Hexdarstellung).
Überschlagsmäßig werden pro 16 Byte Nutzdaten (zu 8 Bit) 45 Zeichen
gespeichert. Demnach komm ich auf für dein Programm auf ca. 920 Byte.
Ich vermute dass für die Codierung von den 14 Bit einfach die oberen
2Bit eines Words auf 0 gesetzt bleiben, demnach würde dein Programm 460
Befehle haben und müßte eigentlich sogar noch in den 16F84 passen.

grüsse leo9

von Markus (Gast)


Lesenswert?

Hallo Sven,

ist die Hexdatei nicht im ASCII-Format? Dann sollte der Code doch noch
viel kleiner sein. Wie kommst Du darauf, daß der Code nicht mehr in den
PIC reinpaßt? Beschwert sich da der Programmer?

Markus

von Sven (Gast)


Lesenswert?

@Markus: ich merkte es daran, daß ab einer gewissen Programmgröße das
Proggi (zu Testzwecken in den Pic gebrannt) nicht mehr läuft. Um
Programmfehler auszuschließen hab ich soweit abgespeckt bis es wieder
lief (Kontrolle durch LCD-Display) und mit einigen Warteschleifen
wieder das Programm verlängert. Diese sind definitiv ok, da sie im
Proggi mehrfach verwendet werden und funktioneren. Also war meine
Folgerung, der PIC-Speicher ist zu klein...  Laut Programmer (Brenner5
und zugehörige Software von SPRUT) hätte schon noch Platz sein
müssen.....

Sven

von Markus (Gast)


Lesenswert?

Der Flashspeicher ist aber nicht der einzige Speicher. Dir kann ja auch
das RAM für die Variablen oder der Stack ausgehen. Andererseits hat der
873er weniger RAM als der 627.

von Dominik S. Herwald (Gast)


Lesenswert?

Na sagte ich ja schon im anderen Thread - nimm den 876er dann wirds
schon klappen ;)

MfG,
DSH

von Sven (Gast)


Lesenswert?

Ja... die Platine hab ich inzwischen für den größeren PIC gemacht. Hätte
mich halt nur mal interessiert, wie man rechnerisch sagen kann, ab hier
brauch ich nen anderen..aber scheint doch ziemlich kompliziert zu sein
;-)
Trotzdem danke an alle für die Hinweise!!

Tschööö Sven

von Steffen (Gast)


Lesenswert?

Warum nschaust Du dir nicht einfach mal das absolute Listing an?

Das ist die vom Assembler generierte *.lst Datei. Dort ist jede
einzelne Programmzeile + Speicheradresse aufgelistet und du siehst
genau wie groß dein Programm ist.

Irgendwo hast Du einen Fehler, wenn das Programm ab einer gewissen
Größe nicht mehr läuft obwohl der Programmspeicher noch nicht voll
belegt ist!

Steffen

von Steffen (Gast)


Lesenswert?

Was vergessen:

Du kannst ab da sagen, dass der Speicher des PIC voll ist, wenn Du
insgesammt n-Befehle bei n-Words Programmspeicher aufgeschrieben hasst.
So einfach isses.

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.