Hallo allerseits, ich wollte mal dieses Assembler-Programm http://www.mikrocontroller.net/wikifiles/e/e6/Dds.asm mittels AVR-Studio kompilieren und dachte, es müßte bei einem vorgefertigten Programm doch glatt gehen - und habe gleich eine Fehlermeldung erhalten: AVRASM: AVR macro assembler 2.1.42 (build 1796 Sep 15 2009 10:48:36) Copyright (C) 1995-2009 ATMEL Corporation C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(37): Including file 'C:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8def.inc' C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(79): warning: Register r28 already defined by the .DEF directive C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(80): warning: Register r29 already defined by the .DEF directive C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(81): warning: Register r30 already defined by the .DEF directive C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(91): warning: Register r21 already defined by the .DEF directive C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(92): warning: Register r22 already defined by the .DEF directive C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(96): warning: Register r26 already defined by the .DEF directive C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(97): warning: Register r27 already defined by the .DEF directive C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(121): error: syntax error, unexpected ',' C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(488): info: macro 'locate' called here ;LCD-Cursor an bestimmte Position setzen .MACRO locate ;(Zeile,Spalte) push temp1 (line 121)-->>> ldi temp1, 0b10000000|(((@0)-1)<<6)|((@1)-1) ; load immediate eine Konstante aus Oder-Verknüpfung rcall lcd_command pop temp1 .ENDMACRO das andere sind alles Warnungen: .def z1 = R28 ; Dieses Registertripel enthält die Phasenposition .def z2 = R29 ; zu der die Register changeX bei der Phasenakk. .def z3 = R30 ; addiert werden .def waveform = R20 ; eingestellte Wellenform ; (Sinus, Rechteck, Dreieck oder Sägezahn) ; Register für die Binär nach Dezimal-Wandlung .def fbin0 = R6 ; binary value byte 0 (LSB) .def fbin1 = R7 ; binary value byte 1 .def fbin2 = R21 ; binary value byte 2 .def fbin3 = R22 ; binary value byte 3 (MSB) .def tBCD0 = R21 ; BCD value digits 1 and 0 (same as fbin2) .def tBCD1 = R22 ; BCD value digits 3 and 2 (same as fbin3) .def tBCD2 = R23 ; BCD value digits 4 and 5 .def tBCD3 = R24 ; BCD value digits 6 and 7 .def tBCD4 = R25 ; BCD value digits 8 and 9 .def fbinL = R26 ; binary value Low byte .def fbinH = R27 ; binary value High byte _________ Wenn ich nun in m8def.inc hinein schaue, sind einige aber nicht alle der angemeckerten Register bereits definiert: OK, das sind die aus der Literatur bekannten Doppelregister, die auch als Zeiger dienen können. ; ***** CPU REGISTER DEFINITIONS ***************************************** .def XH = r27 .def XL = r26 .def YH = r29 .def YL = r28 .def ZH = r31 .def ZL = r30 Da meine letzten Übungsprogramme in Assembler bald ihr zehnjähriges Bestehen auf meinen Datenträgern feiern, ist mir die Fehlersuche in Assemblerprogrammen nicht mehr so sehr geläufig. Früher habe ich für kleinere Programme den WAVRASM verwendet. Mit AVR-Studio ist es mein erstes Asm-Projekt. Ich wäre für Tipps dankbar. Mit freundlichem Gruß Röhrenvorheizer
Hi Ja, die lange Liste von Meldungen müssen schon verwirrend sein, aber Lesen hilft. Da sind Warnungen, die darauf hindeuten, das du bereits definierte Register umdefiniert hast. Es sind halt Warnungen, nicht mehr. Entscheidend ist dies: >C:\Dokumente und Einstellungen\erster\Eigene >Dateien\dds_mega8_mit_LCD.asm(121): error: syntax error, unexpected ',' Das Wort "Error" deutet auf einen Fehler hin und es steht auch da, wie dieser Fehler aussieht. "unexpected ','" ist nichts anderes wie "unerwartetes Komma". Das solltest du wohl finden. Gruß oldmax
> .def XH = r27 > .def XL = r26 > .def YH = r29 > .def YL = r28 > .def ZH = r31 > .def ZL = r30 die sind doch eh schon in der AVR-INC deklariert also warum nochmal in deinem Programm extra ?
Hi >Das Wort "Error" deutet auf einen Fehler hin und es steht auch da, wie >dieser Fehler aussieht. >"unexpected ','" ist nichts anderes wie "unerwartetes Komma". Das >solltest du wohl finden. Das gemeine daran ist, das der Fehler nicht dort liegt. Der Fehler wird durch die Klammern im Unterprogramm 'update' erzeugt:
1 | update: |
2 | locate (1,1) <<<<<<< |
3 | mov temp1, waveform |
4 | rcall printstring |
5 | locate (2,1) <<<<<<< |
Mit
1 | update: |
2 | locate 1,1 <<<<<<< |
3 | mov temp1, waveform |
4 | rcall printstring |
5 | locate 2,1 <<<<<<< |
funktionert es auch im Assembler2. MfG Spess
Hallo allerseits, vielen Dank für die Beiträge. Nun sehe ich mich in meiner Vermutung bestätigt, daß es sich um ein nicht ganz triviales Problem handelt, denn warum sollte das Komma an dieser Stelle unerwartet sein?! Wieder einmal ist ein Kompatibilitätsproblem zwischen alten und neuen Schreibwseisen für alte und neuere Compiler-/ Assembler-Versionen. Gerade kürztlich hatte ich mit der RC5-Geschichte von Peter Dannegger gekämpft, in der die Variable, die den Wert von der Interrupütroutine an das Hauptprogramm übergibt, als Volatile deklariert sein muß, was aber bei der alten Compilerversion nicht nötig war. Natürlich steht überall, daß so eine Variable "volatile" sein muß, nur wenn man vorgefertigte Programme übernimmt, denkt man daran nicht. " Der Fehler lag im Detail... Anstatt extern uint rc5_data; //RC5 Ergebnis muss es extern volatile uint rc5_data; //RC5 Ergebnis heißen." __________________________________________________________ AVR-Studio umgestellt auf AVR-Assembler Version1 unter Beibehaltung der Klammern ergibt folgendes erfolgreich Assemblierte Programm: AVRASM: AVR macro assembler version 1.77.3 (Nov 3 2009 14:11:39) Copyright (C) 1995-2005 ATMEL Corporation Assembling 'C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm' Including 'C:\Programme\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc' dds_mega8_mit_LCD.asm(81) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(82) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(83) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(93) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(94) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(98) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(99) : warning : Register already defined by the .DEF directive Program memory usage: Code : 409 words Constants (dw/db): 256 words Unused : 226 words Total : 891 words Assembly complete with no errors. ______________________________________________________________________ _ "Das gemeine daran ist, das der Fehler nicht dort liegt. Der Fehler wird durch die Klammern im Unterprogramm 'update' erzeugt:" Aha, das ist der Aufruf eines Macros, an das die alte Version die Argumente mit Klammern übergeben haben möchte. So, nun mal ohne die Klammern Assembliert mit Version1: AVRASM: AVR macro assembler version 1.77.3 (Nov 3 2009 14:11:39) Copyright (C) 1995-2005 ATMEL Corporation Assembling 'C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm' Including 'C:\Programme\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc' dds_mega8_mit_LCD.asm(81) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(82) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(83) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(93) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(94) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(98) : warning : Register already defined by the .DEF directive dds_mega8_mit_LCD.asm(99) : warning : Register already defined by the .DEF directive Program memory usage: Code : 409 words Constants (dw/db): 256 words Unused : 226 words Total : 891 words Assembly complete with no errors. ___________________________________________ Und ohne die Klammern klappt's auch mit Version2: AVRASM: AVR macro assembler 2.1.42 (build 1796 Sep 15 2009 10:48:36) Copyright (C) 1995-2009 ATMEL Corporation C:\Dokumente und Einstellungen\erster\Eigene Dateien\dds_mega8_mit_LCD.asm(39): Including file 'C:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8def.inc' dds_mega8_mit_LCD.asm(81): warning: Register r28 already defined by the .DEF directive dds_mega8_mit_LCD.asm(82): warning: Register r29 already defined by the .DEF directive dds_mega8_mit_LCD.asm(83): warning: Register r30 already defined by the .DEF directive dds_mega8_mit_LCD.asm(93): warning: Register r21 already defined by the .DEF directive dds_mega8_mit_LCD.asm(94): warning: Register r22 already defined by the .DEF directive dds_mega8_mit_LCD.asm(98): warning: Register r26 already defined by the .DEF directive dds_mega8_mit_LCD.asm(99): warning: Register r27 already defined by the .DEF directive ATmega8 memory use summary [bytes]: Segment Begin End Code Data Used Size Use% --------------------------------------------------------------- [.cseg] 0x000000 0x0006f6 818 512 1330 8192 16.2% [.dseg] 0x000060 0x000060 0 0 0 1024 0.0% [.eseg] 0x000001 0x00002d 0 44 44 512 8.6% Assembly complete, 0 errors. 7 warnings Danke für die Tipps, wieder was gelernt!!! Die Klammern hätte ich nie gefunden... Gruß Roehrenvorheizer
Hi >Wieder einmal >ist ein Kompatibilitätsproblem zwischen alten und neuen Schreibwseisen >für alte und neuere Compiler-/ Assembler-Versionen. Nein. Ich benutze Das AVR Studio seit Version 2.xy. Die korrekte Übergabe der Parameter an Makros war schon immer ohne Klammern. Der Fehler liegt eigentlich bei den älteren Assemblern, die auch die Schreibweise mit Klammern akzeptieren. MfG Spess
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.