www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler gibt eine Fehlermeldung aus


Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich habe hier einen alten(fremden) Assemblercode für einen PIC16F872. 
Beim Übersetzen gibt der Assembler(MPASMWIN.exe) folgende Meldung aus:

Message[302] : Register in operand not in bank 0.  Ensure that bank bits 
are correct.

Das stimmt auch, an dieser Stelle im Quellcode wird der Befehl "MOVWF 
TRISB" ausgeführt, dabei ist aber die Bank 0 eingestellt. Es gibt 
mehrere Stellen auch mit anderen Befehlen, wo die falsche Bank 
eingestellt ist. Der Compiliervorgang wird aber trotzdem ausgeführt und 
ein Hex-File generiert. Das Gerät funktioniert aber auch. Was macht der 
Assembler in diesem Fall? Wird dann vom Assembler die richtige Bank 
ausgewählt oder wie geht das dann?

Gruß

Andi

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Blick ins Datenblatt verrät, dass an der Adresse von TRISB in Bank 0 
das Register PORTB zu finden ist. Wenn zur Zeit des MOVWF also 
tatsächlich (so wie ich die Compiler-Ausgabe deute) Bank 0 ausgewählt 
ist, schreibt der Befehl nach PORTB und nicht nach TRISB.

Ob das von dem Spezialisten, der den Code geschrieben hat, wohl 
beabsichtigt ist?

Gruß
David

P.S. Datenblatt Seite 8, PDF-Seite 10.

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andi schrieb:
> Wird dann vom Assembler die richtige Bank
> ausgewählt oder wie geht das dann?

bsf     STATUS, RP0    ; auf Bank 1 umschalten
bcf     STATUS, RP0    ; auf Bank 0 zurückschalten

für PIC16F87X

Von selber macht Assembler garnicht ...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
davon gehe ich auch aus. Es gibt insgesamt 12 Meldungen, wo die Bank 
falsch geschaltet ist. Was komisch ist, die Baugruppe läuft seit Jahre 
einwandfrei, und das finde ich komisch. Was ich noch komischer finde, 
dass der Assembler trotzdem ein Hex-File erzeugt, obwohl Fehler 
vorhanden sind.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Message[302] : Register in operand not in bank 0.  Ensure that bank bits
>are correct.

Kenn ich. Das ist nur ein Hinweis die Bank richtig zu setzen.
Die Meldung kann man auch irgendwie abschalten.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Wird dann vom Assembler die richtige Bank
>> ausgewählt oder wie geht das dann?

>bsf     STATUS, RP0    ; auf Bank 1 umschalten
>bcf     STATUS, RP0    ; auf Bank 0 zurückschalten

Probier mal

  BANKSEL TRISB

vor dem Zugriff auf Trisb

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe jetzt den Quellcode durchgenommen(so gut es bei 2000 Zeilen 
geht). Es sind zwar 12 Fehlermeldungen, aber nur an 2 Stellen war die 
Bank falsch gesetzt. Als ich das geändert habe, hat es an der 
Fehlermeldung nichts geändert. Ich glaube auch nicht, dass der Assembler 
so intelligent ist und irgenwelche Folgefehler ankreidet, wie beim 
C-Compiler. Aber es ist jetzt definitiv so, dass die Stellen, die als 
Fehlerhaft gekennzeichnet sind, da ist die Bank richtig gesetzt.

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.