Hallo, hab folgendes Problem: Ich hab mittlerweile sehr viele ASM-Routinen, die ich der Übersichtlichkeit wegen in einzelne Dateien packen möchte, also eine ASM-Datei fürs Display, eine für die Tastatur usw. Die einzelnen Dateien hab ich auch schon erstellt und links im Projektfenster auch eingefügt. Als EntryFile hab ich natürlich meine Hauptprogrammdatei gewählt. Allerdings hab ich jetzt zwei Probleme: 1. Wie mache ich dem Hauptprogramm die Funktionen aus den anderen Dateien bekannt? Bei anderen Assemblern (z.B.8051er) gibts die Schlüsselwörter "public" und "extern" (wie z.B. auch in C). Das scheints beim AVR-Assembler nicht zu geben. Logischerweise erhalte ich dann Fehler, dass call-Aufrufe auf die Routinen der anderen Dateien nicht durchgeführt werden können, weil die Labels nicht bekannt sind. Unprofessionellerweise hab ich das dann so gelöst, dass ich einfach per .include die entsprechenden Dateien eingebunden habe, was zum Fehler Nr.2 führt: 2. Das zweite Problem ist, dass ich den Fehler erhalte, die einzelnen Funktionen würden sich überlagern. Mittels org-Direktive könnte ich das abschalten, aber ich müsste jedesmal das org neu einstellen, wenn meine Hauptapplikation größer wird. Könnte ich auch lösen, wenn ich die Funktion ganz nach hintem im Codespeicher stelle, find ich aber nicht gut. Muss leider wieder das Beispiel des 8051er-Assemblers bringen, bei dem kann ich sogenannte relokatible Segmente einstellen, also der Assembler/Linker entscheidet, wo die Routinen im Speicher liegen, und das möchte ich so auch beim AVR realisieren. Nr. 2 resultiert m.E. aus Nr.1 wegen dem .include. Ich denke also, mit Hilfe zu Nr.1 wäre mir schon geholfen, weil ich dann auf die orgs verzichten kann. Wo liegen meine Fehler? Hoffe, ihr könnt mir helfen. Ralf
Hi Es kommt darauf an , wo deine Include-Dateien stehen. Am Ende deines Programms und ohne .org gibt es keine Probleme. MfG Spess
Die "includes" sollten an der Stelle im Hauptprogramm "aufgerufen", sprich: eingebunden werden, wo sie normalerweise auch im Code stehen würden. Der Assembler schreibt sie dann an der entsprechenden Stelle mit in die .hex-Datei.
Hallo spess53, hallo Travel Rec., ja, das mit hinten ans Ende war jetzt eine Notlösung, mit der es so tut, wie ich es will, aber mal ehrlich, das ist doch kein professioneller Zustand... Sagt bloß, ihr macht das auch so? Was ist das bloß für ein verkorkster Assembler? Wenn die von Atmel keine Ahnung haben, wie man gescheite Assembler programmiert, sollten sie es lassen und lieber gucken, dass ihr Silizium endlich mal fehlerfrei ist... Aber okay, Hauptsache, es tut... Danke... Ralf
Oh, eine Frage noch: wenn ich die Dateien per .include einbinde, brauch ich sie ja eigentlich nicht noch im Projektfenster einbinden, oder? Gleich mal probieren... Ralf
Du bist ganz schön kritisch, Ralf. Das komplette AVR-Studio ist kostenlos und ich arbeite mit dem Assembler an sehr vielen Projekten und komme gut damit zurande.
Hi Include-Dateien werden beim Assemblieren automatisch im Projektfenster unter 'Included Files' aufgenommen. Wo Include-Dateien eingebunden werden können, hängt auch vom Inhalt ab. Wenn die Datei nur Def/Equ/Set-Anweisungen oder Macros, also keinen Programmcode, enthält, kann oder sollte sogar die Einbindung vor dem Programmcode erfolgen. Dateien mit Programmcode können an beliebiger Stelle stehen. Nur nicht vor dem Programmanfang. Da Include-Dateien im allgemeinen nur verschiedene Unterprogramme enthalten, ist es im Prinzip uninteressant, wo die sich im Programmcode befinden. Allerdings mit einer Einschränkung: Bei grösseren Programmen kann es passieren, daß die UPs nicht mehr mit 'rcall', sondern nur noch mit 'call' erreicht werden können. In diesem Fall kann eine Umplatzierung helfen. MfG Spess
@TravelRec: > Du bist ganz schön kritisch, Ralf. Das komplette AVR-Studio ist > kostenlos und ich arbeite mit dem Assembler an sehr vielen Projekten und > komme gut damit zurande. Hast ja recht :-) Ich bin halt echt stutzig geworden, dass man das bei diesem Assembler so machen muss. Ist halt ne kleine Umstellung, aber okay soweit. Bin grad aus anderen Gründen etwas sauer auf Atmel (z.T aber auch zurecht). Nochmals danke für die Hilfe an alle Ralf
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.