PIC/MPLAB: Error118

OP #394978
Lesenswert?

Hallo,
16F84, MPLAB v7.41

in einem bestehenden Projekt habe ich nach mehreren erfolgreichen
Änderungen folgendes Problem:

Nach Einfügen einiger Variablen und anschließendem Beschreiben mit
Werten gibt es folgende Fehlermeldung:
Error[118]   [Datei] : Overwriting previous address contents (0300)

Die eingefügten Variablen stehen an Adresse 17, 18 und 19hex:
variable1  equ    17h
variable2  equ    18h
variable3  equ    19h

Erst beim Füllen mit Werten à la:

       movlw 03h
       movwf variable1
       movlw 0xFF
       movwf variable2
       movwf variable3

kommt es beim Compilieren zur Fehlermeldung. Seltsam. Die paar
eingefügten Zeilen alleine laufen einwandfrei. Und ich dachte, der
ausgewählte Bereich gehört in jedem fall zum general purpose Bereich.
Wieso gibt es plötzlich Probleme mit Adresse 300 - wo tatsächlich was
drinsteht? Auch das Herumprobieren mit 3 willkürlich anderen (aber auch
freien) Adressen im GP-Bereich brachte die gleiche Fehlermeldung.

Bin für jeden Tipp dankbar.

Gruß,
Thomas
Gast #394982
Lesenswert?

Das sind zwei Paar Stiefel:

Die Variablen liegen im RAM und haben damit nichts zu tun.

Das Problem tritt auf, weil durch die eingefügten Befehle das Programm
natürlich länger wird und sich dadurch in dem mit org 300 schon
belegten Teil des Programmspeichers überlappt.
Übrigens wird mit org nicht gesprungen, sondern nur die Startadresse
des folgenden Programmcodes festgelegt.
OP #394983
Lesenswert?

Hallo Dieter,

Danke für die prompte Antwort. Ich hatte auch schon befürchtet, dass
der Platz ein wenig eng wird. Offenbar war die eine Zeile der Tropfen,
der das fass zum Überlaufen brachte. An einer anderen Stelle ein paar
Zeilen (Testroutine) wegge-x-t - schon läuft's. Nun mag ich ungern
einen größeren Controller einsetzen, zumal bis zur FErtigstelleung
vielleicht noch maximal 20 Zeilen Assemblercode dazukommen. Gibt's
erstmal eine Möglichkeit die Speicherbelegung im laufenden Betrieb zu
betrachten? So bestünde vielleicht eine Möglichkeit die
Speicherbelegung zu optimieren. Oder gar ein paar Variablen ins EEPROM
auszulagern.

Gruß,
Thomas
Gast #394984
Lesenswert?

Das Auslagern von Variablen bringt nichts da das Programm dadurch nicht
kürzer wird.

Die Belegung des Programmspeichers lässt sich mit "view" und dann
"disassembly listing" betrachten.
Links vom eigenen Quellcode ist die Programmspeicheradresse zu sehen
auf dem der jeweilige Befehl im Controller steht.

Falls der Adressbereich 300 bis 3FF noch nicht vollständig belegt ist
lässt sich vielleicht auch der dortige code verschieben (org 310 oder
so ähnlich). Die Verweise auf Adressen in dem Bereich müssen dann
natürlich angepasst werden (bei Verwendung von Labels geht das
automatisch).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren