Forum: Compiler & IDEs WinAVR: Assemblercode in C einbinden


von Benjamin (Gast)


Lesenswert?

Hallo Zusammen,
ich habe eine Anwendung bei der ich versuche einen Assemblercode in
einen C-Code ein zu binden, aber irgendwie habe ich meine
Schwierigkeiten damit!!

Kann mir vielleicht mal jemand relativ schnell erklären, wie dies
funktioniert??

Danke schon mal!!

Gruß
Benjamin

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Kannst du uns mal deinen Stand und deine Schwierigkeiten
erläutern?

von Benjamin (Gast)


Lesenswert?

Also ich habe mir den Code von dem Cristian Kranz aus der Codesammlung,
zur Ansteuerung des Siemens S65 Displays herunter geladen. In der
Software wird auf ASM code zugegriffen. Aber ich bekomme
Fehlermeldungen!! ich habe mal einen Screenshot gemacht. Vielleicht
kann mir ja jemand weiterhelfen!?

Gruß
Benjamin

von Benjamin (Gast)


Angehängte Dateien:

Lesenswert?

hier mal das bild!!

;o) .........

von Karl H. (kbuchegg)


Lesenswert?

Der Protoyp fuer die Funktion
lcd_init()
wurde vom Compiler nicht gesehen.

Das kann mehrere Ursachen haben. Mach mal
die includes so:

  #include "eigene\disp.h"
  #include "eigene\lcd.h"

< wird bei includes verwendet um anzuzeigen, dass die gesuchte
  Header-Datei irgendwo im compiler-systemspezifischen Teil zu
  suchen ist

" wird bei includes verwendet um anzuzeigen, dass es sich um eine
  benutzerdefinierte Header-Datei handelt.

Wenn's dann noch immer nocht geht, dann ueberpreuf mal, ob
die Header-Dateie tatsaechlich dort liegen wo sie
sollen. Alternativ kannst Du auch den vollstaendigen
Pfad zu den Include dateien angeben (ist aber nicht so gut,
sowas sollte man nur zu Testzwecken machen).


Und nein: Das ganze hat ueberhaupt nichts mit Assembler zu tun.
Da geht es rein um Dateien, auf welchen Pfaden sie liegen, ob
die Pfadeinstellungen des Compilers richtig sind und wie man
den AUfsuchpfad der Dateien im C-Source Code spezifiziert.

von Karl H. (kbuchegg)


Lesenswert?

undefined reference
bedeutet einfach nur, dass der Compiler ein 'Wort' im
Quelltext entdeckt hat, dass syntaktisch eine Variable
oder ein Funktionsaufruf sein kann, aber weder eine Variable
noch eine Funktion dieses Namens wurde definiert. Also
ein Name, auf den sich der Compiler keinen Reim machen kann.

von Karl H. (kbuchegg)


Lesenswert?

Mist, Heut ist nicht mein Tag:

Wer da meckert ist nicht der Compiler, sondern der Linker.

Ich vermute mal, dass zur lcd.h auch eine lcd.c gehoert.
Nimm sie mit in das Projekt auf und alles ist gut.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nein, undefined reference heißt, dass der Linker das nicht
gefunden hat.  Offenbar wird also die entsprechende Objektdatei
mit der Definition der genannten Funktion gar nicht erst
gelinkt.

von Karl H. (kbuchegg)


Lesenswert?

Fehlanzeige, da gibt es kein lcd.c

Allerdings gibt es ein lcd.asm
Du musst die Datei umbenennen in  lcd.s
in dann ganz einfach als neues Source File in
das Projekt mit aufnehmen.

Habs grade probiert: Funktioniert

von Benjamin (Gast)


Lesenswert?

Danke für eure netten Tipps. Die Datei um zu benennen hat den Erfolg
gebracht. Aber jetzt hängt sich der Simulator beim Aufruf der Routine
lcd_init(); auf. Ich verstehe das aber nicht. Denn irgendwie sagt der
Compiler doch das alles stimmt und der ASM läuft doch auch bei
anderen!?

Wenn jemand das selbe Problem hat, bitte melden. Vielleicht gibt es ja
auch schon eine Lösung!!

Gruß

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.