Forum: Mikrocontroller und Digitale Elektronik STM32CubeIDE Assembler Projekt erstellen


von Christoph K. (chriskuku)


Lesenswert?

Ich versuche innerhalb von STM32CubeIDE ein Assemblerprojekt zu 
erstellen.
Habe dazu ein STM32CubeMX C-Projekt erstellt und die C-Files gelöscht 
und stattdessen die Assembler-Files in das Core/Src Verzeichnis kopiert.

Es ist aber noch soviel an "Projekt-Zubehör" vorhanden (Middleware, 
USB_HOST etc.), was ich doch nicht brauche und was jetzt den Build 
stört.

Wenn ich einzelne Teile davon lösche, kann ich das z.T. nur, wenn ich 
bestätige, daß die Komponenten im Filesystem gelöscht werden. Wohl ist 
mir nicht dabei und ich sehe schon eine STM32CubeIDE-Neuinstallation auf 
mich zukommen :)

Also meine Frage: wie erstelle ich am bequemsten ein reines 
Assembler-Projekt in STM32CudeIDE?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Wenn du ein Projekt erstellst hast du die Wahl, ob alle Nötigen Dateien 
ins Projekt kopiert werden oder auf die Bibliotheken referenziert wird. 
Ich rate dringend dazu, sie immer zu kopieren. Damit vermeidest du 
zahlreiche künftige Probleme.

Und wenn du das gemacht hast, dann ich auch klar, was "im Filesystem 
gelöscht" bedeutet, nämlich nur innerhalb deines Projektverzeichnisses.

Du kannst mit der IDE auch ein fast leere Projekt erzeugen:

Lege mit dem Assistenten der IDE (File/New/STM32 Project) ein 
Arbeitsprojekt mit dem "Target Project Type" "Empty" an. Die CMSIS 
Header musst du dann manuell dazu kopieren, falls du sie brauchst.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Du kannst die Dateien auch im Datei-Browser/Explorer im 
Projektverzeichnis löschen. In Eclipse (CubeIDE) sollten die dann auch 
verschwinden (ggf. Projekt refreshen).

Da du in einem Assembler Projekt aber wahrscheinlich sowieso eigenen 
Startup-Code und Linker-Script schreiben wirst, macht es wahrscheinlich 
Sinn das Projekt leer zu erstellen und von Null an aufzubauen, ggf. auch 
mit eigenem Makefile statt Eclipse Buildsystem.

von Christoph K. (chriskuku)


Lesenswert?

Stefan ⛄ F. schrieb:
>...

> Lege mit dem Assistenten der IDE (File/New/STM32 Project) ein
> Arbeitsprojekt mit dem "Target Project Type" "Empty" an. Die CMSIS
> Header musst du dann manuell dazu kopieren, falls du sie brauchst.

Soweit, so gut. Im Prinzip ist das jetzt gelungen, aber STM32Cube 
durchläuft dann einige Automatismen und meint, einfach jeden 
Assemblerfile compilieren zu müssen, obwohl mein Hauptfile main.s alle 
anderen Assemblerfiles inkludiert. Also noch viel Feinarbeit 
erforderlich.

Mal sehen, ob es sich letztendlich lohnt. Im Moment bin ich anderweitig
bei der Benutzung von blackmagic in der hosted Version noch blockiert, 
weil es da im Build stockt.

Grüße
Christoph

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Christoph K. schrieb:
> meint, einfach jeden Assemblerfile compilieren zu müssen, obwohl mein
> Hauptfile main.s alle anderen Assemblerfiles inkludiert. Also noch viel
> Feinarbeit erforderlich.

Normal, Eclipse kompiliert automatisch alles im Projekt. Benennen die 
Dateien um (z.B. .inc), schließe sie vom Build Prozess aus (umständlich) 
oder verwende ein eigenes Makefile.

von Christoph K. (chriskuku)


Lesenswert?

Niklas G. schrieb:
> Christoph K. schrieb:
>> meint, einfach jeden Assemblerfile compilieren zu müssen, obwohl mein
>> Hauptfile main.s alle anderen Assemblerfiles inkludiert. Also noch viel
>> Feinarbeit erforderlich.
>
> Normal, Eclipse kompiliert automatisch alles im Projekt. Benennen die
> Dateien um (z.B. .inc), schließe sie vom Build Prozess aus (umständlich)
> oder verwende ein eigenes Makefile.

Wollte das gerade noch in meinen Beitrag schreiben, da kam Deine 
Antwort.
Sowas wie "exclude from build" suchte ich.


Habe ja mein eigenes Makefile, aber STM32Cube scheint das nicht zu 
stören.

: Bearbeitet durch User
von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Christoph K. schrieb:
> Soweit, so gut. Im Prinzip ist das jetzt gelungen, aber STM32Cube
> durchläuft dann einige Automatismen und meint, einfach jeden
> Assemblerfile compilieren zu müssen, obwohl mein Hauptfile main.s alle
> anderen Assemblerfiles inkludiert.

Ich denke, das kannst du im gezeigten Dialog unter File/Properties 
beeinflussen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Christoph K. schrieb:
> Habe ja mein eigenes Makefile, aber STM32Cube scheint das nicht zu
> stören.

Das kannst du in den Projekt Einstellungen auswählen.

Christoph K. schrieb:
> Sowas wie "exclude from build" suchte ich.

In den Datei-Eigenschaften unter "C/C++ Build". Vorher bei Build 
Configurations "All" auswählen.

von Christoph K. (chriskuku)


Lesenswert?

Stefan ⛄ F. schrieb:

> Ich denke, das kannst du im gezeigten Dialog unter File/Properties
> beeinflussen.

Danke, das hat geklappt. "Add Multiple" und dann alles anklicken, was 
man exkludieren will.
Was noch nicht geht, ist, daß Cube erkennt, daß es mein Makefile nehmen 
soll. Darin steht nämlich, daß .s von .asm abhängen und bei Änderung 
noch ein asm->s Skript gestartet wird. Nur so als Beispiel für weitere 
Skripte, die getriggert werden, wenn Abhängigkeiten greifen sollen.

Ich will ja möglichst mein Makefile beibehalten und auch noch standalone 
verwenden können.

: Bearbeitet durch User
von Christoph K. (chriskuku)


Lesenswert?

Niklas G. schrieb:
> Christoph K. schrieb:
>> Habe ja mein eigenes Makefile, aber STM32Cube scheint das nicht zu
>> stören.
>
> Das kannst du in den Projekt Einstellungen auswählen.
>

Danke. Kurzer Hinweis vielleicht noch, wo?

Ich kann ja Rechtsklick auf das Projekt machen im "Project Explorer". 
Dann auf ->Properties. Nehme an, dort. Es sollte ja projektspezifisch 
sein.

: Bearbeitet durch User
von Christoph K. (chriskuku)


Angehängte Dateien:

Lesenswert?

Hier mal ein Beipiel, um zu demonstrieren, was nicht geht (die 
Inkludierung des Makefiles bzw. auch das Inkludieren von Assembler 
files). Dabei ist es unbedeutend, ob ich die in .inc umbenenne oder 
nicht. Auch .inc files werden nicht gefunden.

STM32Cube benutzt offenbar temporäre Verzeichnisse (oder ein VFS?) für 
seine Kompilation.
Vielleicht kann man das irgendwo beeinflussen?
1
/var/folders/kc/5p61t70n0llbn05934gj4r_w0000gn/T//cczu9Dvs.s:478: Error: can't open startup.s for reading: No such file or directory

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Angehängte Dateien:

Lesenswert?

Im "normalen" Eclipse-CDT kann man hier auswählen das ein Makefile 
verwendet wird. Schau mal ob STM32CubeIDE das genau so macht.

Christoph K. schrieb:
> STM32Cube benutzt offenbar temporäre Verzeichnisse (oder ein VFS?) für
> seine Kompilation.

Eclipse-CDT legt im Projektverzeichnis für jede Konfiguration ein 
gleichnamiges Build-Verzeichnis an (also z.B. "Debug"/"Release"), und 
darin wird der Compiler/Assembler/make aufgerufen. Normalerweise ist es 
aber kein Problem Dateien im Projektverzeichnis "einfach so" direkt zu 
inkludieren. Dieser kryptische Pfad sieht jedenfalls nicht so aus als 
wäre er von Eclipse angelegt worden.

Dein Makefile ist aber etwas... unorthodox? Was macht dein eigener 
Präprozessor?

von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Bei der STM32 Cube IDE sieht der Dialog etwas anders aus, aber es ist 
dennoch die richtige Stelle.

von Christoph K. (chriskuku)


Lesenswert?

Niklas G. schrieb:
...
> Dein Makefile ist aber etwas... unorthodox? Was macht dein eigener
> Präprozessor?


In dem geposteten Beispiel ist es nur ein einfaches sed-Skript, das die 
.asm-Syntax in .s-Syntax konvertiert, im wesentlichen nur Kommentare mit 
'@' zu versehen.

Aber es sind noch viele andere Pre- und Postbuildskripte auszuführen.

von Christoph K. (chriskuku)



Lesenswert?

Stefan ⛄ F. schrieb:
> Bei der STM32 Cube IDE sieht der Dialog etwas anders aus, aber es ist
> dennoch die richtige Stelle.

Danke. Gefunden. Abwählen des Punktes "Generate Makefiles 
automatically".
Jetzt muß man noch das Working directory ändern. Debug wird nicht mehr 
angelegt. Wenn ich Src als working directory setze, nimmt CUBE auch mein 
Makefile.

Jetzt komme ich ein Stück weiter, allerdings kriege ich keinen 
Breakpoint gesetzt. Würde gerne starten und auf Reset: anhalten.

Nebenfrage: wie untersucht man memory im STM32CubeIDE?

: Bearbeitet durch User
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.