www.mikrocontroller.net

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


Autor: Sd Fritze (sd-fritze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forengemeinde,

ich wollte heute besagten Code assemblieren und bekomme dabei folgenden 
Fehler:
AVRASM: AVR macro assembler 2.1.17 (build 435 Apr 10 2008 09:27:55)
Copyright (C) 1995-2008 ATMEL Corporation

D:\avr\tempmess-am2-v2020\AnzModul2.asm(112): Including file 'C:\Programme\Atmel\AVR Tools\AvrAssembler2\Appnotes\m128def.inc'
D:\avr\tempmess-am2-v2020\AnzModul2.asm(1893): error: syntax error, unexpected '\n', expecting '('

Assembly failed, 1 errors, 0 warnings
.
Der Angemeckerte asm Block sieht so aus:
  ldi  r22,0xa0    ;schmales Leerzeichen laden
  call  asclcd      ;Zeichen ausgeben
  movw  r16,r8      ;gesicherte EEPROM-Adresse holen
  ldi  r19,16      ;Preset-Textlänge im EEPROM
  call  eeplcd      ;EEPROM-Text ausgeben
  rjmp  m13110
;
; Menüzeile ausgeben: Menü-Option ausgeben
;
m13100:  call  strlen      ;Stringlänge ermitteln -- hier meckert er!
  ldi  r20,222      ;Endposition der Menüzeile
  sub  r20,r18      ;Text-Anfang berechnen, bis
  ldi  r21,126      ;dahin alle Pixel löschen
  mov  r18,r13      ;gesicherte Anfangsposit. holen

Die Funktion strlen sieht so aus:
strlen:  clr  r18      ;Länge Anfangswert=0 setzen
  lds  r16,confg1    ;Konfigurationsbyte 1 holen
  bst  r16,0      ;Sprache englisch?
  brts  str110      ;nein -> weiter
  ldi  zl,byte3(stengl*2)  ;sonst
  out  rampz,zl
  ldi  zl,low(stengl*2)
  ldi  zh,high(stengl*2)  ;Zeiger auf englische Texte
  rjmp  str120
;
str110:  ldi  zl,byte3(stgerm*2)
  out  rampz,zl
  ldi  zl,low(stgerm*2)
  ldi  zh,high(stgerm*2)  ;Zeiger auf deutsche Texte
;
str120:  elpm  r16,z+      ;Zeichen holen
  cpi  r16,0xfe    ;String-Kennung gefunden?
  brne  str120      ;nein -> weiter suchen
  elpm  r16,z+      ;Zeichen holen
  cp  r16,r22      ;Zeichenkette gefunden?
  breq  str130      ;ja -> Länge ermitteln
  cpi  r16,0xfe    ;Endezeichen gefunden?
  brne  str120      ;nein -> weitersuchen
  ret        ;sonst Ende
;
str130:  elpm  r16,z+      ;Zeichen holen
  cpi  r16,0xff    ;Endezeichen?
  brne  str140      ;nein -> weiter
  ret        ;sonst Ende
str140:  cpi  r16,' '      ;Leerzeichen?
  brne  str150      ;nein -> weiter
  ldi  r16,0xa0    ;sonst schmales Leerzeichen
str150:  subi  r16,0x20    ;Korrektur für Tabelle
  cpi  r16,0xe0    ;Bereich überschritten?
  brcs  str160      ;nein -> weiter
  ret        ;sonst Ende (Fehler)
str160:  ldi  r17,12      ;Tabellen-Offset
  mul  r16,r17      ;Tabellenplatz berechnen
  push  zl
  push  zh
  in  zl,rampz
  push  zl      ;String-Zeiger sichern
;
  ldi  zl,low(chrset*2)  ;Zeiger auf Zeichentabelle L
  ldi  zh,high(chrset*2)  ;Zeiger auf Zeichentabelle H
  ldi  r16,byte3(chrset*2)  ;Zeiger auf Zeichentabelle B3
  clr  r17
  add  zl,r0      ;Tabellenadresse L berechnen
  adc  zh,r1      ;Tabellenadresse H berechnen
  adc  r16,r17      ;Tabellenadresse B3 berechnen
  out  rampz,r16
  elpm  r16,z      ;Zeichenbreite holen
;
  pop  zl
  out  rampz,zl
  pop  zh
  pop  zl      ;String-Zeiger restaurieren
  inc  r16      ;Zeichenbreite korrigieren
  add  r18,r16      ;zur Gesamtlänge addieren
  rjmp  str130      ;Schleife
.
Wie bekomm ich das jetzt zum Assemblieren?
Mit Assembler kenn ich mich (noch) nicht aus.
SD-Fritze

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Sd Fritze (sd-fritze)
Datum:

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

Sd-Fritze

Autor: Johannes S. (demofreak)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Autor: Sd Fritze (sd-fritze)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jupp, das wars!
Danke


SD-Fritze

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.