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
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.
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.
>>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
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
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
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
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...
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
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
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...
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
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.
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.
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).
>>>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.