Forum: Compiler & IDEs Eclipse und STM32: Pfade finden


von Detlef _. (detlef_a)


Lesenswert?

Hallo,

ich fummel mich gerade in Eclipse und STM32F407 rein. Es geht eigentlich 
alles erstmal gut, jetzt will ich über die STM libs an die Peripherie 
ran.
Dazu habe ich mir ein Beispiel mit Interrupts und einem USART aus dem 
Netz gezogen.

Das kriege ich nicht übersetzt:
'undefined reference to NVIC_Init'

NVIC_Init kommt aus 'misc.h'. Der Pfad zu misc.h ist in Eclipse in den
project properties -> C/C++general -> Paths and Symbols -> includes
mit ${ProjDirPath}/lib/inc eingebunden

Das File findet Eclipse auch, denn wenn ich dort einen Syntaxfehler 
einbaue bricht er genau dort ab. Ausserdem kennt er die dort definierten 
structs.

Nur die NVIC_Init Routine kennt er nich, obwohl die in mish.h exportiert 
wird:

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

Habt Ihr einen Rat?

THX
Cheers
Detlef

von Mike R. (thesealion)


Lesenswert?

Du musst die entsprechenden .h Dateien auch noch mit #include "misc.h" 
in deiner compile Unit mit einbinden.
Ansonsten weiß Eclipse zwar, wo es danach suchen muss (und der 
itegrierte Parser kann es auch auflösen) aber der Compiler findet das 
ganze nicht.

von Steffen R. (steffen_rose)


Lesenswert?

Detlef _a schrieb:
> Das kriege ich nicht übersetzt:
> 'undefined reference to NVIC_Init'

Das dürfte kein Compilerfehler sondern ein Linkerfehler sein.
Du hast die passende .c-Datei nicht im Projekt.

von Detlef _. (detlef_a)


Lesenswert?

>>Du hast die passende .c-Datei nicht im Projekt.

Yo, genau, das wars'. Ich dachte dieses Zeug von ST sei in einer lib. 
Nein, das existiert in der Source. Makefile ergänzt, dann gehts.

Wohl noch nen langer Weg bis man flüssig ist in Eclipse.

Cheers
Detlef

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

Hallo Detlef,
wenn Du mit der genannten Kombination eclipse/STM32 gerade anfängst, 
würde ich auf die CUBE-Bibliotheken von ST zurückgreifen. Allem Anschein 
nach stellen die die gesamte Bibliotheksstruktur auf das Konzept um.
Ich selbst bin auch gerade dabei, den Schritt von der StdLib etc. zu 
CUBE zu gehen.
Grüße, Kurt

von Detlef _. (detlef_a)


Lesenswert?

Hi,

ja,hatte ich bei ST was zu gesehen. Ich bin aber erstmal froh, dass es 
geht und bleib dabei. Außerdem habe ich eine schwere Allergie gegen 
'graphische Entwicklungsumgebungen'.


Cheers
Detlef

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

Hallo Detlef,
das grafische Werkzeug zur Systemdefinition läuft leider nur auf 
Windows, nicht einmal mit Wine unter Linux, ist aber eine wirkliche 
Erleichterung der Umsetzung der diversen Konfigurationen (alternative 
Pins, Clock, ...). Den erzeugten Code hole ich mir dann nach eclipse und 
Tschüss :-). Da meine STM32-Projekte noch am Anfang sind, habe ich mich 
zum Umstieg auf CUBE entschlossen, auch wenn es in eclipse noch etwas 
holpert. Und für die grafische Umgebung verwende ich eine VM mit WWin7 
oder wechsle auf mein Windows-System :-).
Grüße, Kurt

von Dr. Sommer (Gast)


Lesenswert?

Kurt Harders schrieb:
> Allem Anschein
> nach stellen die die gesamte Bibliotheksstruktur auf das Konzept um.
Ja, von schlecht auf katastrophal...

Kurt Harders schrieb:
> das grafische Werkzeug zur Systemdefinition läuft leider nur auf
> Windows,
Du meinst STM32CubeMX? Das läuft wunderbar unter Linux, aber nicht mit 
wine, sondern mit Java:
"java -jar SetupSTM32CubeMX-4.4.0.exe" zum Installieren und
"java -jar STM32CubeMX.exe" zum Starten.
Das funktioniert weil die .exe gleichzeitig eine .zip Datei ist (der ZIP 
Header muss nicht am Anfang der Datei stehen), und Java .jar Dateien 
sind einfach nur .zip Dateien mit entsprechendem Inhalt. Der .exe Teil 
macht auch nichts anderes als java zu starten...

von Detlef _. (detlef_a)


Lesenswert?

Hallo,

wie bekomme ich denn jetzt mein übersetztes Projekt auf den ARM? 
Manchmal gehts', ich habe aber noch keinen reproduzierbaren Weg 
gefunden.

Was ich tue:
- Ich starte aus Eclipse als externes tool openOCD, der sieht mein 
target, alles gut ('stm32f4x.cpu device found')
- Ich starte gdb als externes tool, scheint zu gehen:

>>>>>>>
Info : accepting 'gdb' connection from 3333
Warn : acknowledgment received, but no packet pending
Info : JTAG tap: stm32f4x.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, 
part: 0xba00, ver: 0x4)
Info : JTAG tap: stm32f4x.bs tap/device found: 0x06413041 (mfg: 0x020, 
part: 0x6413, ver: 0x0)
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x08003b54 msp: 0x20020000
<<<<<<<

Jetzt kann ich allerdings 'Resume' oder 'Relaunch' klicken, nichts 
startet das Programm. Wenn ich das board allerdings vom JTAG abziehe und 
extern versorge ist manchmal (unter welchen Umständen ist mir nicht 
klar) das Programm geflasht und läuft.

Frage jetzt: Ich will schlicht unter Eclipse/openOCD/gdb das Programm 
flashen und starten. Wie geht denn das?

Danke
Gute Nacht
Detlef

von Kurt H. (Firma: KHTronik) (kurtharders)


Lesenswert?

Hallo Dr. Sommer,
kleine Ergänzung: es muss java-1.8 sein und das eclipse plugin läuft 
auch damit nicht, weil es eine window-dll enthalten soll. Die 
standalone-Version scheint auf JavaFX umgestellt zu sein.
Also: wer oracle java 1.8 auf Linux nutzt kann es genau so machen, wie 
Du es vorgeschlagen hast.
Zur Bibliotheksstruktur halte ich mich mal bedeckt, da ich noch nicht 
die Konzeptionen der Bibliotheken verinnerlicht habe. Ohne diese 
Verinnerlichung des Konzeptes der Entwickler (sofern vorhanden :-)) 
kämpft man eventuell an Fronten, die man selbst aufgebaut hat.
Grüße, Kurt

von Dr. Sommer (Gast)


Lesenswert?

Kurt Harders schrieb:
> Ohne diese
> Verinnerlichung des Konzeptes der Entwickler (sofern vorhanden :-))
> kämpft man eventuell an Fronten, die man selbst aufgebaut hat.
Wenn man so etwas 
Beitrag "Re: STM32f4 mit Cube HAL Programmierung. Neue Syntax"  sieht, 
hat man schon keine Lust mehr.

Kurt Harders schrieb:
> kleine Ergänzung: es muss java-1.8 sein
Oh, hatte da gar nicht drauf geachtet, da das onehin bei mir installiert 
war.

Detlef _a schrieb:
> Frage jetzt: Ich will schlicht unter Eclipse/openOCD/gdb das Programm
> flashen und starten. Wie geht denn das?
Vielleicht mal verraten, was für einen JTAG-Adapter du verwendest...

von Detlef _. (detlef_a)


Lesenswert?

Ich nehme nen Olimex ARM JTAG Adapter, das geht auch, ich schrub 
'stm32f4x.cpu device found'.

Ich will schlicht mit dem Adapter das board flashen und das Programm 
starte, sonst nix.

Cheers
Detlef

von Dr. Sommer (Gast)


Lesenswert?

Detlef _a schrieb:
> Ich nehme nen Olimex ARM JTAG Adapter
Gut dass Olimex nur einen hat. halt...

Detlef _a schrieb:
> Ich will schlicht mit dem Adapter das board flashen und das Programm
> starte, sonst nix.
Das geht leider mit jedem Adapter anders. Wenn du aber nicht verrätst, 
welchen du hast, kann dir keiner helfen.

von Detlef _. (detlef_a)


Lesenswert?

ARM-USB-OCD-H heißt das Ding.

Cheers
Detlef

von Bernd K. (prof7bit)


Lesenswert?

Dr. Sommer schrieb:

> Wenn man so etwas
> Beitrag "Re: STM32f4 mit Cube HAL Programmierung. Neue Syntax"  sieht,
> hat man schon keine Lust mehr.

Möglicherweise ist der native Interger-Typ auf dieser Maschine die 
performanteste Art eine boolesche Variable abzubilden.

von Dr. Sommer (Gast)


Lesenswert?

Bernd K. schrieb:
> Möglicherweise ist der native Interger-Typ auf dieser Maschine die
> performanteste Art eine boolesche Variable abzubilden.
Ganz sicher nicht... ARMv7M kann einzelne Bytes genauso schnell 
verarbeiten.

Detlef _a schrieb:
> ARM-USB-OCD-H heißt das Ding.
Mit dem kenne ich mich nicht aus... Poste mal den gdb trace. Oder 
versuch allgemein mal, direkt vom GDB zu flashen/auszuführen (ohne 
eclipse).

von Detlef _. (detlef_a)


Lesenswert?

>>>Frage jetzt: Ich will schlicht unter Eclipse/openOCD/gdb das Programm
flashen und starten. Wie geht denn das?

Habs rausgekriegt:
Der openOCD Server läuft.
Dann muss man gdb so konfigurieren, dass er nicht nur flasht und anhält 
sondern auch das target loslaufen läßt:

Debug configurations -> create, manage and run configurations ->
Startup -> runtime options (runterscrollen)

Dort 'monitor reset run' eintragen, dann gehts.

Uff
Cheers
Detlef

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.