Forum: Mikrocontroller und Digitale Elektronik STM32F429-DISCO und FourQ


von Christopher S. (shalec)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

ich arbeite im Rahmen meiner Masterarbeit zum ersten Mal mit C und einem 
Mikrocontroller. Die Grundlagen für beides habe ich innerhalb von knapp 
einer Woche gelernt. Da ich auf dem µC nur rechnen will und evtl. mal 
eine LED blinken soll genügen die Grundlagen soweit. Meine Erfahrungen 
in der Programmierung beschränken sich im wesentlichen auf PHP und 
andere Websprachen, sowie Computer-Algebra-Systeme, wie Sage, Pari, 
Matlab, Magma und co.

Ich bin Mathematiker und wollte die Herausforderung in der Informatik 
angehen ;) Meine Vertiefung ist die Kryptographie.

Nun zum eigentlichen Problem. Ich nutze CooIDE mit der ARM-Toolchain 
(arm-none-eabi-gcc) und möchte die, von Microsoft zur Verfügung 
gestellte, FourQ-Lib [1] für den Prozessor kompilieren. Beim Linken 
bekomme ich dann aber unzählige Fehler wegen fehlender Libs. Angefangen 
mit librt über libc.so.0, libpthread.so.0 usw.

In den Referenzen sind jedoch Benchmark für den Cortex M4 Prozessor 
gegeben. Es muss also möglich sein diese Lib dafür passend zu 
übersetzen.

Ich habe auch MinGW mit MSYS installiert und habe entsprechend eine CMD, 
die der Konsole in UBuntu gleicht. Ubuntu habe ich ebenfalls in einer 
VM-Ware installiert. Worauf ich letztendlich arbeite, ist mir egal.


Kurze Info zum System: OS=Win10.

Ich konzentriere mich hauptsächlich auf den "FourQ_x64_..." Ordner und 
habe dort die Makefile für den ARM angepasst. (-march=native auf stmv7-m 
geändert, -float-abi=hard, ..) Ich habe die Makefile angehängt. Die 
Tests habe ich noch nicht bearbeitet, hier werde ich aber entsprechend 
eine grüne oder rote LED blinken lassen, bei pass bzw. error.

Also meine Frage nun an die Community, die sich mit den µC auskennen: 
Wie schaffe ich es, die FourQ Funktionen und Datentypen in eine Lib zu 
übersetzen, dass ich sie in meinem Hauptprojekt nutzen kann?

Viele Grüße und vielen Dank für die Unterstützung :)

[1] https://www.microsoft.com/en-us/research/project/fourqlib/

von Jim M. (turboj)


Lesenswert?

Da wirst Du Dich mal noch tiefer mit C Compiler und Linker beschäftigen 
müssen, denn da sehe ich doch arge Defizite im Makefile.

Das fängt damit an dass Du was mit "LibXXX" erzeugtst, was aber keine 
Lib sondern ein fertig gelinktes Programm wäre (nach den Compiler 
Optionen und Parametern). Statische Libs baut man ganz anders.
Übrigens: Dynamisch gelinkte Libs gibt es auf ARMv7-M nicht unter GCC.

Dann wird auch offenbar Assembler aus AMD64 verwendet - der ist mit 
100%iger Sicherheit nicht unter ARM übersetzbar.

Ansonsten würde ich halt denjenigen fragen, der die Cortex-M4 Benchmark 
Werte produziert hat. Der muss ja wissen wie man die Lib erzeugen kann. 
Vorsicht: Das läuft dann u.U. nur auf dem einen speziellen 
Mikrocontroller-Typ.

von Dieter Graef (Gast)


Lesenswert?

Schau mal hier: 
https://github.com/Microsoft/FourQlib/tree/master/FourQ_ARM
läuft da aber auf einem STM32F407 und entsprechend angepasst werden.
m.f.G.
Dieter Gräf

von Christopher S. (shalec)


Angehängte Dateien:

Lesenswert?

Dieter Graef schrieb:
> Schau mal hier:
> https://github.com/Microsoft/FourQlib/tree/master/FourQ_ARM


Wie der Zufall es so will, habe ich genau diesen Link kurz vorher auch 
endlich finden können :D

Ich habe hier den STM32F429ZI-DISCO und den STM32F407 auf einem lilanem 
Board mit der Aufschrift CJMCU-407. Das Flashen hatte hier zwar 
geklappt, aber ich habe kein Feedback bekommen, ob der Code auch 
funktionierte. (Feedback wäre eine LED zum Blinken zu bekommen :) )

Also vielen Dank schon mal für die Hilfe bislang. Sehr flott und sehr 
nett :)

@Jim Meba
Ja, da hast du recht. Ich benenne hier eine Datei "libFourQ" in der 
Makefile, die als Programm kompiliert wird. Habe darauf nicht wirklich 
geachtet.. eine Lib erzeugt man doch durch z.B.
ar -cvq libfourq.a *.o
Das habe ich nun in der Makefile ersetzt.
Wenn ich diese nun fertig gebaut habe, also die Lib, kann ich dann in 
meiner Main einfach die Datentypen aus der Lib nutzen, als wären sie 
native C-Datentypen?
Hierzu habe ich kein Tutorial gefunden, dass anhand einer Lib zeigt, wie 
man sie selber baut, einbindet und nutzt.

von Felix F. (wiesel8)


Lesenswert?

Zu einer Lib gehört auch immer ein Headerfile mit den 
Funktionsprototypen und Datentypen.

Ein Programm für einen F4 läuft prinzipiell auch auf allen anderen F4s. 
Das einzige Problem ist fehlende Peripherie auf den kleineren Modellen 
(z.B. nur 3 statt 6 UARTS etc...). Von Klein (F407) auf Groß (f429) 
sollte Problemlos möglich sein, muss aber zumindest neu gelinkt werden 
(andere größere Speicherbereiche).

mfg

von Christopher S. (shalec)


Lesenswert?

Macht sowas nicht der Flasher (stm32 stlink utility) automatisch?

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.