mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC/MPLAB: Error118


Autor: Thomas Miehling (tm112)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Profi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich sind durch die Einfügungen Adressen verschoben worden.
Nicht alle Befehle können alle Adressen ansprechen, da zu wenige Bits
vorhanden sind.

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Meldung gibt es beispielsweise wenn das (gewachsene) Programm
schon die Adresse 300 belegt, danach aber mit org 300 versucht wird
diese Adresse ein zweites Mal zu belegen.

Autor: Thomas Miehling (tm112)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK. Es gibt einen Abschnitt, in dem mit org 300 gesprungen wird.
Trotzdem leuchtet's mir nicht ein, warum die Fehlermeldung kommt, wenn
Variablenwerte in Speicherplätzen weit darunter geschieben werden.

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Miehling (tm112)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Thomas Miehling (tm112)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dieter,

Danke für den Tipp. Die höchste Adresse ist 342h. Da sollte sich doch
noch was nach oben schieben lassen ...
Gruß,

Thomas

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.