Kann assembler file nicht builden

OP #7734993

Hallo alle

Ich möchte gerne das angehängte File zu einem HEX-File builden. Doch ich bekomme Errors. Ich verwende die neuste Version der MPLAB X IDE. Ich verwende den pic-as(v2.5) compiler Danke für Inputs!

Angehängte Dateien:
Gast #7735092

Einfach ins selbe Verzeichnis wie deinen Quellcode packen, dann lässt sich das problemlos assemblieren. Ich hab das Hexfile mal angehängt.

Cyblord -. schrieb:

Warum hat ne library eine .TXT Endung?

Das darf die haben. Die dürfte sogar .CYBLORD heißen, aber das will ja niemand.

Angehängte Dateien:
Gast #7735129

Ich kenne die aktuelle MPLAB X zu wenig, verwende noch die schon 12 Jahre alte MPLAB 8.84, und damit läuft das problemlos.

Haben die einen ganz neuen Assembler mit anderer Syntax eingebaut?

#7735141

In deinem ersten Bild wird der Assembler mit -mcpu=PIC16F628A, vermutlich von deiner Projekt Definition, aufgerufen. Im .asm-File in Zeile 176 wird der processor auf 16f628 definiert. Angeblich beißt sich das.

Ich würde einfach mal Zeile 176 auskommentieren und schauen was dann passiert :-)

Edit: Und ggf die richtige .inc Datei includen falls sich der A und der nicht A unterscheiden.

#7735156

Cyblord -. schrieb:

Nur war das nicht die Frage.

Es ist gar keine Library, aber seit der Arduinoisierung können das viele nicht mehr differenzieren. Weil es ja den einen kleinen Ausnahmefall gibt, daß in C++ tatsächlich Code in einer Headerdatei (*.h) untergebracht sein kann, deswegen muss man die bislang klare Differenzierung zwischen Sourcedatei, Headerdatei, Objektdatei und Library in die Tonne treten. Hilft ja auch total bei der Fehlersuche, so etwas.

Früher (tm) hätte diese Datei *.inc geheißen.

Gast #7735162

Harald K. schrieb:

Es ist gar keine Library, aber seit der Arduinoisierung können das viele nicht mehr differenzieren.

Die gabs schon als Arduino noch in weiter Ferne lag, und sowas wurde auch damals schon Library genannt.

; RCS Header $Id: fp24.a16 2.7 1996/10/07 13:50:29 F.J.Testa Exp $ ; $Revision: 2.7 $ ; PIC16 24 BIT FLOATING POINT LIBRARY

(Firma: 1984now) #7735172

Harald K. schrieb:

Weil es ja den einen kleinen Ausnahmefall gibt, daß in C++ tatsächlich Code in einer Headerdatei (*.h) untergebracht sein kann, deswegen muss man die bislang klare Differenzierung zwischen Sourcedatei, Headerdatei, Objektdatei und Library in die Tonne treten.

Das ist doch Unsinn. Auch in C kann man "Code" in Headerdateien schreiben (bei allem, bei dem man inlining forcieren möchte, muss man das sogar). Und in Asm natürlich sowieso.

Wenn schon rummeckern, dann am C-Konzept. Denn das hätte hergeben müssen, das in Headern kein Code sein kann und kein Code sein muss. Das hat C nicht leisten können, weil es halt nur ein wahnwitzig aufgeplusterter Macro-Assembler ist. Und naja: C++ hat's dann von C geerbt...

Früher (tm) hätte diese Datei *.inc geheißen.

Nö. Die hätte einfach *.asm geheißen. Weil: da wird tatsächlich Code erzeugt. Das entspricht einer *.c-Datei (du scheinst ja sowieso nix anderes zu kennen, deswegen diese Erläuterung für dich).

Das Äquivalent zu einer *.h-Datei im C/C++-Umfeld nennt man im Asm-Umfeld dann allerdings tatsächlich bevorzugt *.inc. Das macht klar, dass hier eben kein Code erzeugt werden soll. Code-Konstrukte sollten in solchen Dateien nur als Macros auftauchen, was Funktionen mit force inline in C entspricht.

(Firma: 1984now) #7735190

Ob S. schrieb:

Alles richtig, aber wohl unwichtig für das konkrete Problem des TO.

Da kommt es darauf an, was diese IDE tut und was der verwendete Assembler tut.

Ich kenne beide nicht, aber im Prinzip gibt es zwei Varianten:

  1. Der Kram wird in ein linkbares Zwischenformat übersetzt und am Ende gelinkt. Dann müsste in der Ausgabe zwei Aufrufe für den Assembler sichtbar sein und ein Aufruf für den Linker. Sieht allerdings nicht danach aus, als wenn es so wäre.

  2. Das ist noch ein old-school-Assembler. Dann muß der Quelltext der "Lib" an irgendeiner Stelle im Quelltext des Hauptteils includiert werden. Dabei kommt es wieder darauf an, ob das ein OnePass- oder ein Mehrpass-Assembler ist. Bei OnePass muß die Include-Direktive zwingend vor dem Teil des Quelltextes stehen, der Code erzeugt (zumindest vor dem ersten Aufruf einer Subroutine aus dem includierten Code). Bei Mehrpass ist es egal, ob davor oder dahinter. Der Assembler dröselt die Referenzen in einem späteren Pass alleine passend auf.

(Firma: 1984now) #7735200

H. H. schrieb:

Ob S. schrieb:

ein Aufruf für den Linker.

So weit kommt es beim TE ja gar nicht, bei meiner älteren IDE schon. Ich hab der aber auch erzählt, dass es um einen PIC16F628 geht, nicht PIC16F628A. Allerdings gäbe es da bei der älteren Version nur eine Warnung, nicht einen Abbruch.

Das spricht dann eindeutig dafür, dass der verwendete Assembler keine linkbaren Code erzeugt. Der TO sagt:

pic-as(v2.5) compiler

Was'n das? Gehört das zur IDE? Ist die darauf vorbereitet? Ist das überhaupt ein Assembler?

Fragen über Fragen...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 2 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.