AVR-Studio - wie mit mehreren ASM-Dateien arbeiten

Gast #719112
Lesenswert?

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
Gast #719210
Lesenswert?

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
Gast #719237
Lesenswert?

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
Gast #719351
Lesenswert?

@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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren