Eclipse und STM32: Pfade finden

#3899510
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
(Firma: KHTronik) #3903815
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
(Firma: KHTronik) #3903978
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
Gast #3903998
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...
#3904855
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
(Firma: KHTronik) #3904883
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
Gast #3905008
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...
Gast #3905487
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).
#3905585
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren