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.
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
Gibt es eine Möglichkeit zu sehen, welches Programmteil noch an diesem Adressebereich plaziert wurde? Gruß Mathias B.
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... :-/
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.
Das hab ich im Programm noch nicht geändert: org 0000h sjmp 001eh Gruß Mathias
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...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.