Forum: Mikrocontroller und Digitale Elektronik AT89C5131A Assembler Warning L5


von Mathias B. (matzbeck)


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.

von Peter D. (peda)


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

von Mathias B. (matzbeck)


Lesenswert?

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

Gruß
Mathias B.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...  :-/

von Mathias B. (matzbeck)


Angehängte Dateien:

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.

von Mathias B. (matzbeck)


Lesenswert?

Das hab ich im Programm noch nicht geändert:

org 0000h
sjmp 001eh

Gruß
Mathias

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von Mathias B. (matzbeck)


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

von Mathias B. (matzbeck)


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:
1
$nomod51$
2
#include <at89c5131.h>
3
EXTRN CODE (interrupt1)
4
EXTRN CODE (Start4)
5
org 0000h
6
jmp Vorb
7
8
org 0003H   ;Programm beginnt an der Interrupteinsprungadresse vom externen Inerrupt 0
9
ljmp    Start4  ;Spring unbedingt nach Start
10
11
org 0013h
12
ljmp interrupt1

Gruß
Mathias

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.