Forum: Mikrocontroller und Digitale Elektronik AVR code produziert Fehler


von R. F. (rfr)


Angehängte Dateien:

Lesenswert?

Anliegendes Programm produziert Fehlermeldungen, die mir aber nichts 
sagen. Was ist hier nicht in Ordnung?

Error  1  Overlap in .cseg: addr=0x0 conflicts with 0x0:0x1f
Error  2  Use of undefined or forward referenced symbol 'OVFOaddr' in 
.org
Error  3  Overlap in .cseg: addr=0x0 conflicts with 0x0:0x1f



Gruss

Ro

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


Lesenswert?

R. F. schrieb:
> Was ist hier nicht in Ordnung?
Wenn du nichts weiter definierst, dann beginnt das CSEG sowieso bei 
0x0000. Und du hast hier nichts weiter definiert:
1
.CSEG
2
reset:
3
  call init;

Aber später biegst du auf diese Adresse, die ja schon call init 
beinhaltet noch den reset drauf:
1
.org 0x0000;          
2
  rjmp reset;

Probiers einfach mal so, wie es üblich ist:
1
.CSEG
2
.org 0x0000;     
3
  rjmp reset; 
4
           
5
.org OVFOaddr;   
6
    rjmp timerinterrupt_ISR;     
7
8
.org 0x0020;      hinter die Interrupttabelle springen (Wert korrigieren!)
9
reset:
10
  call init;
11
main_loop:
12
  call get_ldr_value;            
13
  :
14
  :

von Peter II (Gast)


Lesenswert?

.org OVFOaddr;              timerint handeln
    rjmp timerinterrupt_ISR;      ISR jump addr

das steht ganz am ende, damit ist kein Platz mehr in der sprungtabelle 
weil dort der restliche code steht.

mach den teil mal vor das init

  .org 0x0000;              reset handeln
  rjmp reset;
  .org OVFOaddr;              timerint handeln
    rjmp timerinterrupt_ISR;      ISR jump addr

von Stephan (Gast)


Lesenswert?

Hi die anderen beiden haben ja schon fast alles gesagt.
1
.org OVFOaddr;
2
soll heissen ->
3
.org OVF0addr;
4
5
6
.org INT_VECTORS_SIZE;      das könnte gehen
7
reset:
8
  rcall init;
9
main_loop:
10
  rcall get_ldr_value;

Hast du das Programm selber zusammen kopiert oder ein anderer???

Da sind so viele komische Sachen drin:
call -> sollte rcall sein
jmp  -> sollte rjmp sein
out r16,DDRB; -> sollte out DDRB,r16;
usw.

Bitte mal ins Datasheet sehen!

von R. F. (rfr)


Lesenswert?

Ich habe das selbst geschrieben. Genauer: ich schreibe noch.

".org OVFOaddr;
soll heissen ->
.org OVF0addr;"--> habe ich bereits korrigiert (selbst gefunden!!)

folgende Fehler teten aber jetzt auf, ich nehme an, dass es sich um 
einen Multipassassembler handelt?) Was ist zu tun?


------ Build started: Project: Lichtmessgerät, Configuration: Debug AVR 
------
Build started.
Project "Lichtmessgerät.asmproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; 
('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Atmel Studio 
6.2\Vs\Assembler.targets" from project "C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerät\Lichtmessgerät\Lichtmessgerät\Lichtmessgerät.as 
mproj"  (target "Build" depends on it):
  Task "RunAssemblerTask"
    C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR 
Assembler\Native\2.1.1175\avrassembler\avrasm2.exe -fI -o 
"Lichtmessgerät.hex"  -m "Lichtmessgerät.map"  -l "Lichtmessgerät.lss" 
-S "Lichtmessgerät.tmp"  -W+ie -itn26def.inc -d 
"C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerät\Lichtmessgerät\Lichtmessgerät\Debug/Lichtmessge 
rät.obj"   "C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerät\Lichtmessgerät\Lichtmessgerät\Lichtmessgerät.as 
m"   -I "C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR 
Assembler\Native\2.1.1175\avrassembler\Include"
    AVRASM: AVR macro assembler 2.1.57 (build 16 Aug 27 2014 16:39:43)
    Copyright (C) 1995-2014 ATMEL Corporation
    [builtin](2): Including file 'C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\tn26def.inc'
    C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(8):  Including file 'C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\tn26def.inc'
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(10,0):  error: Undefined symbol: Ergebnis
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(11,0):  error: Undefined symbol: Counter
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(12,0):  error: Undefined symbol: stelle
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(21,0):  error: Undefined symbol: timerinterrupt_ISR
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(25,0):  error: call k: Unsupported instruction on ATtiny26
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(28,0):  error: call k: Unsupported instruction on ATtiny26
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(29,0):  error: call k: Unsupported instruction on ATtiny26
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(30,0):  error: call k: Unsupported instruction on ATtiny26
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(31,0):  error: call k: Unsupported instruction on ATtiny26
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(32,0):  error: jmp k: Unsupported instruction on ATtiny26
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(45,0):  error: Invalid register
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(46,0):  error: Invalid register
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(47,0):  error: Invalid register
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(54,0):  error: Undefined symbol: stelle
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(54,0):  error: Invalid register
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(55,0):  error: Invalid register
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(57,0):  error: Undefined symbol: Ergebnis
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(57,0):  error: Invalid register
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(58,0):  error: Invalid register
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(62,0):  error: Invalid number
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(64,0):  error: Invalid number
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(68,0):  error: Undefined symbol: SPH
C:\Users\RFr\Documents\Atmel 
Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(70,0):  error: Undefined symbol: SPL

von Cyblord -. (cyblord)


Lesenswert?

> Lichtmessgerät.asmproj

Irx.
Umlaute in Dateinamen. Auch hässlich.

Dann muss es die "timerinterrupt_ISR" natürlich auch irgendwo geben.
Hirnloses Copy&Paste sollte man auch von Beispielcode nicht machen.

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


Lesenswert?

R. F. schrieb:
> (selbst gefunden!!)
Hat den nicht der Assembler gefunden und gemeldet?

Stephan schrieb:
> Da sind so viele komische Sachen drin:
> call -> sollte rcall sein
> jmp  -> sollte rjmp sein
Das kann der Assembler selber aufdröseln und je nach Sprungweite in 
einen ljmp oder rjmp umbiegen...

R. F. schrieb:
> C:\Users\RFr\Documents\Atmel
> Studio\6.2\Lichtmssgerõt\Lichtmessgerõt\Lichtmessgerõt\Lichtmessgerõt.as 
m(10,0):
> error: Undefined symbol: Ergebnis
Könnte es sein, dass .dw da im RAM nicht funktioniert?
https://www.mikrocontroller.net/articles/AVR-Tutorial:_SRAM
https://www.mikrocontroller.net/articles/AVR-Tutorial:_Speicher
https://www.mikrocontroller.net/articles/Adressierung

von Stephan (Gast)


Lesenswert?

Lothar M. schrieb:
> Stephan schrieb:
>> Da sind so viele komische Sachen drin:
>> call -> sollte rcall sein
>> jmp  -> sollte rjmp sein
> Das kann der Assembler selber aufdröseln und je nach Sprungweite in
> einen ljmp oder rjmp umbiegen...

wann wird das gemacht?
Sorry ist schon etwas her...

Beim Simulator im AVR Studio 4 bricht er beim kompilieren mit dem Fehler
>\dd.asm(18): error: jmp k: Unsupported instruction on ATtiny26
und
>dd.asm(25): error: call k: Unsupported instruction on ATtiny26
ab!

von Karl H. (kbuchegg)


Lesenswert?

Lothar M. schrieb:

>> error: Undefined symbol: Ergebnis
> Könnte es sein, dass .dw da im RAM nicht funktioniert?

glaub ich nicht.
Aber in
1
.dw Ergebnis;                der binärwert des adc

ist nun mal der ';' zu viel

> Ich habe das selbst geschrieben.

Schön. Aber du übernimmst dich.
Du bist noch lange nicht so weit, dass du sinnvoll ein Programm in 
diesem 'Schwierigkeitsgrad' schreiben kannst. Fang doch erst mal im 
Tutorial vorne an und nicht mitten drinn. Zusammentragen von 
Achtelwissen hilft keinem weiter. Diese Dinge wollen gerade in Assembler 
von der Pieke auf gelernt werden.

Ganz abgesehen davon, ist es bei dir ein sicherer Weg ins Desaster, wenn 
du versuchst alles auf einmal zu schreiben. Man fängt mit einem 
Minimalprogramm an, dass erst mal überhaupt nichts tut ausser die 
Infrastruktur wie Stackpointer zu initialisieren. Wenn das assembliert, 
dann erweitert man, zb um die ersten Portpins. Dann wird wieder 
assembliert und getestet ehe dann das nächste kleine Teilchen dazu 
kommt. Wieder assemblieren, testen. Versuchst du das zu umgehen, dann 
kommt es eben dazu, dass dir die Häppchen ganz schnell viel zu groß 
werden und du dich nicht mehr raussiehst. Im Endeffekt bist du mit einem 
schrittweisen Vorgehen mit ganz kleinen Schritten (und nach jedem 
Schritt testen) um Größenordnungen schneller, als wenn du versuchst 
alles in einem Rutsch zu schreiben. Denn letzteres geht mit absoluter 
Sicherheit schief. Der Unterschied zwischen dir und mir besteht darin, 
dass meine Schritte größer sind. Ich hab dir allerdings so ungefähr 35 
Jahre Erfahrung voraus. Aber die Grundtechnik des schrittweisen 
arbeitens mach ich genau so, wie du es machen solltest.

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.