Forum: Mikrocontroller und Digitale Elektronik Fehlermeldung: overlap detected in .cseg


von freddy0815 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

habe ein problem beim programmieren in AVR Studio.
ich habe 2 programme geschieben. das eine sendet messwerte vom
controller (atmega32) über rs232 an pc (excel). das funktioniert.
das andere ist ne I²C schnittstelle (controller --> sensor).
das funtioniert auch.

jetzt wollte ich beide programme in eines bekommen. habe das rs232 als
"hauptprogramm" genommen und rufe das I2C in diesem auf.

das I2C hab ich in ne *.inc kopiert (wie im anhang zu sehen ist). es
sind dort nur deklarierungen von konstanten (.equ) und unterprogramme
enthalten.

das rs232 prog fängt so an:

.NOLIST
.INCLUDE "D:\m32def.inc"
.INCLUDE "D:\I2C_read_twi_neu1.inc"
.LIST

.cseg
.org $0000
  rjmp main


beim compilieren bringt er mir jetzt in der zeile 'rjmp main' die
fehlermeldung:
'overlap detected in .cseg'

wenn ich die zeile:
".INCLUDE "D:\I2C_read_twi_neu1.inc"
ausblende kommt keine fehlermeldung. ich weiss aber absolut nicht was
der von mir will. bin auch noch kein experte in assembler ;-)

könnt ihr mir weiterhelfen???

wäre sehr dankbar!
freddy0815

von Volkmar (Gast)


Lesenswert?

Tippe mal darauf, daß der I2C-Code schon ins CSEG ab Adresse 0 gelegt
wird. Dann gibt es in dem Main-Part natürlich ein Problem. Wenn ich
mich recht erinnere (C51 ist lange her bei mir), gibt es eine Direktive
RSEG mit der Du Code in ein verschiebbares Segment legen kannst. Dann
sucht der Linker die besten Stellen zusammen. CSEG nur dann, wenn Du an
bestimmte Adressen (wie zB 0) mußt.

Volkmar

von Stefan Kleinwort (Gast)


Lesenswert?

Hallo freddy,

In dieser Datei fängt Dein Code an - und wird ab der Adresse Null (weil
nichts anderes angegeben wurde) im Flash abgelegt:


.INCLUDE "D:\I2C_read_twi_neu1.inc"

Danach setzt Du die Adresse, ab der Code geschrieben werden soll,
erneut auf Null:

.cseg
.org $0000
  rjmp main

Der Code "rjmp main" steht also ab Adresse Null im Flash - und
überschreibt den Code von i2c...neu.inc.

Abhilfe:
Hänge das .inc an den Schluss Deines Assembler-Files.

Viele Grüße, Stefan

von freddy0815 (Gast)


Lesenswert?

danke! hab .include ganz ans ende gesetzt und s geht jetzt!

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.