Forum: Mikrocontroller und Digitale Elektronik Anzeigemodul 2 von Scott-Falk Huehn [AVR]


von Sd F. (sd-fritze)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

Einfach Doppelklick auf die Fehlermeldung. AVR-Studio springt zur 
entsprechenden Zeile. Ansonsten ist der Fehler in Zeile (1893).

MfG Spess

von Sd F. (sd-fritze)


Lesenswert?

Ja, das weis ich schon.
Nur was muss ich ändern, damit es Assembliert wird?

Sd-Fritze

von Johannes S. (demofreak)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

Woher soll hier jemand wissen, welches deine Zeile 1893 ist?

MfG Spess

von Gast (Gast)


Lesenswert?

Hallo,

strlen() ist eine Funktion und kann als Label nicht benutzt werden.

von Sd F. (sd-fritze)


Lesenswert?

Jupp, das wars!
Danke


SD-Fritze

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.