Hallo! habe ein problem mit dem einbinden von assemblerdateien. z.b. beim yampp7 (www.yampp.com für diejenigen dies nicht kennen) sind einige dateien mit der endung .asm. jedoch müssten in avr-gcc eingebundene dateien die extension .s besitzen und die zugehörigen header datein die funktionen mit extern am anfang deklarieren. wieso ist das nicht so? hat jemand von euch mit dieser sache erfahrung? entschuldigung dass ich nicht gleich im yampp forum frage aber eine antwort in deutsch bzw. eine frage in deutsch zu stellen fällt mir 1000mal leichter! merci beaucoup! fabian
Nein, die Dateien müssen nicht auf .S enden (großes S bitte!), aber wenn sie das nicht tun, dann muß man dem Compiler das mit -x assembler-with-cpp halt sagen. Meiner Erinnerung nach ist yampp (aus was auch immer für Gründen) diesen Weg gegangen.
hallo aha! schon mal ein problem gelöst, danke! aber jetzt stellt sich die frage immer noch, wieso sind in den header dateien die funktionen nicht mit extern an anfang also zum beispiel extern void funktion1(void) definiert?!??!?? hatt hier jemand ne idee? oder wird das mit dem "-x assembler-with-cpp" schon "gesagt"?!? merci! gruss fabian
Eine Funktionsdeklaration ohne `static' ist implizit `extern'. Bei Variablendeklarationen war dies ganz früher auch so, allerdings kann man dort die Deklaration nicht wirklich von der Definition unterscheiden, so daß aus heutiger Sicht int foo; eine Definition darstellt (für eine globale Variable). Damit ist dies so in einer Headerdatei (die in mehreren C-Dateien verarbeitet werden soll) formal nicht mehr zulässig (es gäbe dann ja am Ende mehrere Variablen `foo'), so daß dort das `extern' stehen muß. GCC ist in seiner Voreinstellung jedoch mit der historischen Schlampigkeit kompatibel, d. h. dort würde selbst das funktionieren. Wenn man das vermeiden will, muß man mit -fno-common übersetzen. Bei Funktionen ist der Fall jedoch nach wie vor eindeutig: int foo(void); /* eine Deklaration */ int foo(void) { /* Eine Definition, die ggf. auch Deklarations- * charakter haben kann, wenn es das erste Auftreten * des Bezeichners foo im aktuellen Scope ist. */ }
hallo zusammen, hmm...tönt grad noch ein bisschen schwierig aber langsam dämmerts :-) sorry bin erst im dritten lehrjahr (elektroniker) und hab mir C-programmieren mit AVRs eigentlich selbst beigebracht drum bin ich hoffentlich entschuldigt dass ich dies jetzt nicht aufs erste mal ganz verstehen! also im grunde genommen könte ich jetzt so ein programm machen: main.c ====== void asmfunktion(void); void main(void) { asmfunktion(); } assemblercode.asm ================= asmfunktion: nop nop ret müsste noch das oben genannte textchen im makefile zu den compiler parameter hinzufügen und die sache sollte laufen?!? ist dies korrekt? merci für eure hilfe! gruss fabian
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.