www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT89C5131A Assembler Warning L5


Autor: Mathias B. (matzbeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin vor ca einem halben Jahr in die Assemblerprogrammierung 
eingestiegen, da es auf meinem Ausbildungsplan steht(EGS).
Ich bin nicht so gut in der Assemblerprogrammierung und wende mich 
deswegen an euch...
In meinem Assemblerprogramm kommt immer eine Warnung, wenn ich die 
Hex-Datei erstellen möchte:
*** WARNING L5: CODE SPACE MEMORY OVERLAP
    FROM:    0003H
    TO:      0015H


Heißt das, dass mein Speicher zu klein ist oder dass dieser 
Programmspeicher schon belegt ist?
Eigentlich ist mein Programm garnicht so extrem groß...


Nochwas:
Ich programmiere mein Assemblerprogramm mit Keil µVision3.



Gruß
Mathias B.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Meldung heißt, daß Du 2 Programmteile an die selbe Adresse plaziert 
hast.

Für den Anfänger ist es am einfachsten, die Programmteile streng nach 
aufsteigender Adresse zu sortieren.
D.h. eine ORG-Anweisung muß immer >= der aktuellen Adresse sein.


Peter

Autor: Mathias B. (matzbeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es eine Möglichkeit zu sehen, welches Programmteil noch an diesem 
Adressebereich plaziert wurde?

Gruß
Mathias B.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mathias B. schrieb:
> Gibt es eine Möglichkeit zu sehen, welches Programmteil noch an diese
> Adresse plaziert wurde?
1) Such mal nach .ORG in deinem Programm
   Und dann sieh nach, ob nach der .org 0000 zuviel Code steht.
   Da sollte beim 8051 nur ein "ljmp MAIN" sein...
2) Lass dir ein passendes Assemblerlisting ausgeben

> Gibt es eine Möglichkeit zu sehen, welches Programmteil noch an diese
> Adresse plaziert wurde?
Zeig doch mal deinen Code...  :-/

Autor: Mathias B. (matzbeck)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab jetzt gefunden, wie man im Keil sehen kann, in welcher 
Speicheradresse welcher Code steht.
Wenn man in dem Debug-Modus ist und oben auf View geht, muss man auf 
Disassambly Window klicken, dann sieht man alle Speicheradressen und 
die Befehle in den Adressen.
Man kann aber noch immer nicht sehen, welche Befehle für die gleichen 
Speicheradressen zugewiesen sind.

Zu meinem Keil-Projekt:
Es besteht aus 5 A51-Dateien

Gruß
Mathias B.

Autor: Mathias B. (matzbeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hab ich im Programm noch nicht geändert:

org 0000h
sjmp 001eh

Gruß
Mathias

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Main:
M_PROG  SEGMENT CODE    ;Programmspeicherbereich declarieren
CSEG  AT 0                ;Code-Segment beginn auf 0000h festlegen
USING  0                  ;Registerbank 0 wird verwendet
LJMP    START      ;Spring unbedingt nach Start

und im LCD_Driver:
EXTRN CODE (interrupt1)
org 0000h
sjmp 0020h
org 0013h

Das beißt sich irgendwie...

Autor: Mathias B. (matzbeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich erklärs kurz...

Dieses Programm, RC5, ist für einen Mobilen Roboter gedacht, der fährt.
Aus RC5_Ansteuerung_motor, RC5_Receive, RC5_Main, RC5_LCD besteht 
eigentlich das RC5-Programm, mit dem ich meinen Mobilen Roboter per 
Fernbedienung steuern kann.
Ich habs schon aufgespielt und getestet. Es funktioniert einwandfrei!

Dann hab ich noch ein anderes Programm, das heißt "Hindernis".
Bei dem Programm fährt der Mobile Roboter frei herum und erkennt, dank 
der Infrarot-Sensor-Platine, Gegenstände.
Nun wollte ich es so machen, dass ich beide Programme aufspiele und 
auswählen kann, welches ich grad will.

Gruß
Mathias

Autor: Mathias B. (matzbeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für eure Bemühung!!!
Ich habe den Fehler jetzt endlich gefunden!!!
Das Problem war, dass die Adresse 0003h nicht im RC5_Main stand, 
sondern RC5_Receive.
Habs jetzt geändert und jetzt hab ich keine Warnungen mehr!

Jetzt sieht es so im Main aus:
$nomod51$
#include <at89c5131.h>
EXTRN CODE (interrupt1)
EXTRN CODE (Start4)
org 0000h
jmp Vorb

org 0003H   ;Programm beginnt an der Interrupteinsprungadresse vom externen Inerrupt 0
ljmp    Start4  ;Spring unbedingt nach Start

org 0013h
ljmp interrupt1 

Gruß
Mathias

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.