AVR code produziert Fehler

OP #4292707
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
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #4292732
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
  :
Gast #4292734
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
Gast #4292795
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!
OP #4292851
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
Moderator (Firma: Titel) Persönliche Seite #4292879
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
Gast #4292904
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!
#4292974
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren