Hallo, im obigen ZIP-File habe ich ein Projekt mit den Beispielen hier aus dem MC-Forum zur Mischung zwischen C und Assembler erstellt. Leider erhalte ich folgende Fehlermeldung: ../chGCCASM_test.c:13: undefined reference to `ultraFunc' ../chGCCASM_test.c:15: undefined reference to `gigaFunc' Weis jemand, woran es liegen könnte? Gruß, Christoph
Lass das "extern" mal weg. Ein Funktionsprototyp in C braucht das nicht. Oliver
Das war es nicht. In der test.S scheint soviel falsch zu sein, daß der Assembler es gar nicht mehr merkt. Da musst du wohl noch mal in die Grundlagen einsteigen. Oliver
>In der test.S scheint soviel falsch zu sein, daß der Assembler es gar >nicht mehr merkt. Da musst du wohl noch mal in die Grundlagen >einsteigen. Das Beispiel habe ich direkt aus dem AVR-GCC-Tutorial kopiert: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial ( siehe Unterpunkt Assembler ) Wenn ich also direkt "noch mal in die Grundlagen einsteigen muss", dann stimmt wohl direkt was nicht mit dem Tutorial. Gruss, Christoph
Mittlerweile habe ich herausgefunden, dass es am falsch plazierten ".end" statement lag. Dann funktioniert es. Was Olivers Aussage betrifft, scheint es hier einige Verwirrung bezüglich der Assembler-Typen und deren Syntax zu geben. Ich habe herausgefunden, dass der ATMEL Assembler im AVR-Studio nicht der selbe ist, der bei eine C-Projekt im AVR-Studio verwendet wird. Damit ändert sich wohl leider auch die Syntax. Es gibt folgende Möglichkeiten: 1. ATMEL-Assembler Projekt 2. WIN-AVR mit GCC und GNU-Assembler ( oder auch GAS genannt ) Jetzt versuche ich gerade herauszubekommen, welchen Syntax der GNU-Assembler für Makros mit Parameterübergabe verwendet. Das funktioniert scheinbar anders als beim ATMEL-Assembler. Christoph
Hallo, ich beschäftige mich erst seit kurzem mit AVR Controllern, vorher PIC und 8051. Mir sind im AVR-Gcc Tutorial bei dem Einbinden von Assembler-Dateien 2 Dinge unklar (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Assembler-Dateien) beide Fragen beziehen sich auf die Datei useful.S 1)warum kann hier auf die Register über eine einfache Zahl zugegriffen werden? (siehe workreg=16, workreg2=17, ...) udn nicht wie sonst in asm mit
1 | .define workreg r16 |
oder
1 | equ workreg=$016 |
2) in der Funktion superfunc:
1 | out _SFR_IO_ADDR(DDRD), workreg |
warum kann ich hier nicht direkt auf das DDRD zugreifen? In Assembler würde die zeile doch eigentlich so aussehen:
1 | out DDRD, r16 |
Ich habe schon nen bisschen rumgesucht, das ganze scheint nur so zu laufen, wenn man asm und c mischen will. Aber gute Literatur, die eine gute Beschreibung und erklärung liefert, hab ich leider noch nicht gefunden. Falls die Entwicklungsumgebung relevant ist: Ich nutze AVR Studio 4.18 Danke im voraus!
Leichenschänder, der Thread ist mehr als 4 Jahre alt! zu 1) keine Ahnung zu 2) Hängt mit der Architektur der AVRs zusammen. Insbesondere z.B. das Register zum Teil über unterschiedliche Adressen angesprochen werden können. Siehe: http://www.nongnu.org/avr-libc/user-manual/group__avr__sfr__notes.html
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.