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
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 | : |
.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
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!
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
> 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.
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
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.