Mikrocontroller und Digitale Elektronik
›
Thread
Anzeigemodul 2 von Scott-Falk Huehn [AVR]
SF
Sd F.
(sd-fritze)
OP
25.04.2009 12:05
#1241054
Hallo Forengemeinde,
ich wollte heute besagten Code assemblieren und bekomme dabei folgenden
Fehler: 1 AVRASM: AVR macro assembler 2.1.17 (build 435 Apr 10 2008 09:27:55)
2 Copyright (C) 1995-2008 ATMEL Corporation
3
4 D:\avr\tempmess-am2-v2020\AnzModul2.asm(112): Including file 'C:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\m128def.inc'
5 D:\avr\tempmess-am2-v2020\AnzModul2.asm(1893): error: syntax error, unexpected '\n', expecting '('
6
7 Assembly failed, 1 errors, 0 warnings
.
Der Angemeckerte asm Block sieht so aus: 1 ldi r22,0xa0 ;schmales Leerzeichen laden
2 call asclcd ;Zeichen ausgeben
3 movw r16,r8 ;gesicherte EEPROM-Adresse holen
4 ldi r19,16 ;Preset-Textlänge im EEPROM
5 call eeplcd ;EEPROM-Text ausgeben
6 rjmp m13110
7 ;
8 ; Menüzeile ausgeben: Menü-Option ausgeben
9 ;
10 m13100: call strlen ;Stringlänge ermitteln -- hier meckert er!
11 ldi r20,222 ;Endposition der Menüzeile
12 sub r20,r18 ;Text-Anfang berechnen, bis
13 ldi r21,126 ;dahin alle Pixel löschen
14 mov r18,r13 ;gesicherte Anfangsposit. holen
Die Funktion strlen sieht so aus: 1 strlen: clr r18 ;Länge Anfangswert=0 setzen
2 lds r16,confg1 ;Konfigurationsbyte 1 holen
3 bst r16,0 ;Sprache englisch?
4 brts str110 ;nein -> weiter
5 ldi zl,byte3(stengl*2) ;sonst
6 out rampz,zl
7 ldi zl,low(stengl*2)
8 ldi zh,high(stengl*2) ;Zeiger auf englische Texte
9 rjmp str120
10 ;
11 str110: ldi zl,byte3(stgerm*2)
12 out rampz,zl
13 ldi zl,low(stgerm*2)
14 ldi zh,high(stgerm*2) ;Zeiger auf deutsche Texte
15 ;
16 str120: elpm r16,z+ ;Zeichen holen
17 cpi r16,0xfe ;String-Kennung gefunden?
18 brne str120 ;nein -> weiter suchen
19 elpm r16,z+ ;Zeichen holen
20 cp r16,r22 ;Zeichenkette gefunden?
21 breq str130 ;ja -> Länge ermitteln
22 cpi r16,0xfe ;Endezeichen gefunden?
23 brne str120 ;nein -> weitersuchen
24 ret ;sonst Ende
25 ;
26 str130: elpm r16,z+ ;Zeichen holen
27 cpi r16,0xff ;Endezeichen?
28 brne str140 ;nein -> weiter
29 ret ;sonst Ende
30 str140: cpi r16,' ' ;Leerzeichen?
31 brne str150 ;nein -> weiter
32 ldi r16,0xa0 ;sonst schmales Leerzeichen
33 str150: subi r16,0x20 ;Korrektur für Tabelle
34 cpi r16,0xe0 ;Bereich überschritten?
35 brcs str160 ;nein -> weiter
36 ret ;sonst Ende (Fehler)
37 str160: ldi r17,12 ;Tabellen-Offset
38 mul r16,r17 ;Tabellenplatz berechnen
39 push zl
40 push zh
41 in zl,rampz
42 push zl ;String-Zeiger sichern
43 ;
44 ldi zl,low(chrset*2) ;Zeiger auf Zeichentabelle L
45 ldi zh,high(chrset*2) ;Zeiger auf Zeichentabelle H
46 ldi r16,byte3(chrset*2) ;Zeiger auf Zeichentabelle B3
47 clr r17
48 add zl,r0 ;Tabellenadresse L berechnen
49 adc zh,r1 ;Tabellenadresse H berechnen
50 adc r16,r17 ;Tabellenadresse B3 berechnen
51 out rampz,r16
52 elpm r16,z ;Zeichenbreite holen
53 ;
54 pop zl
55 out rampz,zl
56 pop zh
57 pop zl ;String-Zeiger restaurieren
58 inc r16 ;Zeichenbreite korrigieren
59 add r18,r16 ;zur Gesamtlänge addieren
60 rjmp str130 ;Schleife
.
Wie bekomm ich das jetzt zum Assemblieren?
Mit Assembler kenn ich mich (noch) nicht aus.
SD-Fritze
S
spess53
Gast
25.04.2009 13:25
#1241099
Hi
Einfach Doppelklick auf die Fehlermeldung. AVR -Studio springt zur
entsprechenden Zeile. Ansonsten ist der Fehler in Zeile (1893).
MfG Spess
SF
Sd F.
(sd-fritze)
OP
25.04.2009 13:48
#1241112
Ja, das weis ich schon.
Nur was muss ich ändern, damit es Assembliert wird?
Sd-Fritze
Steht doch da:
"error: syntax error, unexpected '\n', expecting '('" - "Unerwartetes
'\n', erwarte '('"
Mit anderen Worten, das Zeilenende kommt ihm zu früh, er hätte da gern
noch einen Parameter (oder zumindestens Klammern) gehabt.
S
spess53
Gast
25.04.2009 13:53
#1241118
Hi
Woher soll hier jemand wissen, welches deine Zeile 1893 ist?
MfG Spess
G
Gast
Gast
25.04.2009 14:54
#1241161
Hallo,
strlen() ist eine Funktion und kann als Label nicht benutzt werden.
SF
Sd F.
(sd-fritze)
OP
25.04.2009 15:23
#1241170
Jupp, das wars!
Danke
SD-Fritze
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
Noch kein Account?
Die Registrierung ist kostenlos und dauert nur eine Minute.
Jetzt registrieren