Forum: Mikrocontroller und Digitale Elektronik AVR-Studio - wie mit mehreren ASM-Dateien arbeiten


von Ralf (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

Es kommt darauf an , wo deine Include-Dateien stehen. Am Ende deines 
Programms und ohne .org gibt es keine Probleme.

MfG Spess

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Ralf (Gast)


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

von Ralf (Gast)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von spess53 (Gast)


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

von Ralf (Gast)


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

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.