www.mikrocontroller.net

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


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.