Forum: Mikrocontroller und Digitale Elektronik RPI Pico Toolkette, Problem mit CMakelists.txt


von B. W. H. (kormorix)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe die Toolkette für meinen Raspberry PI pico unter Windows10 lt. 
Anleitung
https://www.youtube.com/watch?v=B5rQSoOmR5w
mit MinGW! zum Laufen gebracht (ich bin Anfänger, was ARM und 
entsprechende Tollketten betrifft). Ebenso habe ich das dort 
beschriebene Beispiel-Programm "Blink" in einem eigenen, vom 
SDK/pico/.... separaten Verzeichnis, linken und übersetzen (und 
natürlich laufen) lassen können.
Nun wollte ich das Programm zur Ansteuerung von RGB-LEDs aus den 
pico-examples/pio/ws2812 in einem eigene, separaten Verzeichnis zum 
Laufen bringen. (zur folgenden Beschreibung siehe auch die angehängten 
Screenshots).
Beim make habe ich nun folgendes Problem:

C:\Users\ep7bu\RP_pico\Eigene\WS2812eigen\main.c:14:10: fatal error: 
ws2812.pio.h: No such file or directory
   14 | #include "ws2812.pio.h"
      |          ^~~~~~~~~~~~~~

make findet also die Datei "ws2812.pio.h" nicht, die sich im 
Unterverzeichnis "generated" des Projektordners befindet (kontrolliert, 
vorhanden!).

Und nun meine Frage: wie muß die Anweisung in "CMakeLists.txt" heißen, 
damit make die fragliche Datei findet?

Und noch eine Frage am Rande: was muß ich einstellen, damit sich die 
Git-Bash innerhalb des Terminalfensters von VS-Code öffnet und nicht als 
separates Fensters? Und wo kann ich Fontgröße der Gitbash einstellen?

Vielen Dank schon mal für "sachdiehnliche Hinweise"!

von B. W. H. (kormorix)


Angehängte Dateien:

Lesenswert?

... hier nochmal die CMakeLists.txt in einer besser lesbaren Version.

von Gustl (Gast)


Lesenswert?

Text bitte als Text anhängen und nicht als Bild.
Denn aus Bildern kann man Text schlecht rauskopieren.

von Florian-Wilhelm (Gast)


Lesenswert?

Hat jetzt leider nicht direkt was mit deiner Frage zu tun.

Aber hast du zufällig einen Raspberry Pi 3 oder 4 irgendwo rumliegen? 
Mit meinem RasPi 3 habe ich in letzter Zeit sehr viel für den Pico 
kompiliert und hatte bisher keine Probleme.

Hab mich dabei immer direkt an die Doku gehalten (für RasPi 3 ab Kapitel 
2):

https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf

von c-hater (Gast)


Lesenswert?

B. W. H. schrieb:

> Nun wollte ich das Programm zur Ansteuerung von RGB-LEDs aus den
> pico-examples/pio/ws2812 in einem eigene, separaten Verzeichnis zum
> Laufen bringen. (zur folgenden Beschreibung siehe auch die angehängten
> Screenshots).

> Beim make habe ich nun folgendes Problem:
>
> C:\Users\ep7bu\RP_pico\Eigene\WS2812eigen\main.c:14:10: fatal error:
> ws2812.pio.h: No such file or directory
>    14 | #include "ws2812.pio.h"
>       |          ^~~~~~~~~~~~~~
>
> make findet also die Datei "ws2812.pio.h" nicht, die sich im
> Unterverzeichnis "generated" des Projektordners befindet (kontrolliert,
> vorhanden!).

Da sollte sie aber eigentlich nicht liegen. Normalerweise entsteht im 
Projektordner ein Verzeichnis namens "build" und fast(*) alles temporäre 
Zeug landet dort.

(*) die Ausnahme von der Regel ist eine pico_sdk_import.cmake, die 
direkt im Projektordner erzeugt wird.

Vermutlich ist also schon beim bei der Konfiguration was völlig falsch 
gelaufen. Und tatsächlich ist deine CMakeLists.txt in mehrfacher 
Hinsicht grob fehlerhaft.

Ich würde dir ja jetzt gerne diese Stellen zitieren, aber leider kann 
man aus Screenshots schlecht zitieren...

von B. W. H. (kormorix)


Lesenswert?

Yuhu, es hat geklappt!!

Danke an alle, die sich die Mühe gemacht und Zeit genommen, mir zu 
antworten!

Ich hatte die Doku zum RP2040 weiter durchstöbert und bin unter

https://datasheets.raspberrypi.com/pico/raspberry-pi-pico-c-sdk.pdf


in Kapitel 3.2.1.3 auf Infos gestoßen, die mir weitergeholfen haben.
Folgende Dinge sind mir bei meinen zahlreichen "Rekursionsschleifen" 
beim Finden der Lösung noch aufgefallen:
- vor neuem "cmake ...." das Unterverzeichnis "build" löschen!
- in der "CMakeLists.txt" auf Groß/Kleinschreibung der Verz. und Dateien 
achten! (Sonst werden manche Dateien nicht gefunden!)
- Wenn ich es richtig beobachtet habe, können Dateien nicht einfach ins 
Verezichnis kopiert, sondern müssen in VS-Code per "neue Datei" im 
Folder abgelegt werden. Aber da würde mich eine Verifizierung meiner 
Behauptung mal interessieren!

Und hier meine CMakeLists.txt (Verzeichnisname geändert, sonst alle 
Dateien aus den examples):

# set minimum required version of CMake:
cmake_minimum_required(VERSION 3.12)

# include build functions from Pico SDK:
include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)

# set name of project (as PROJECT_NAME) and C/C++ standards
project(WS2812_eigen C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

if (PICO_SDK_VERSION_STRING VERSION_LESS "1.3.0")
    message(FATAL_ERROR "Raspberry Pi Pico SDK version 1.3.0 (or later) 
required. Your version is ${PICO_SDK_VERSION_STRING}")
endif()

# creates a pico-sdk subdirectory in our project for the libraries
pico_sdk_init()

# Tell CMake where to find the executable source file
add_executable(WS2812_eigen)

# generate the header file into the source tree as it is included in the 
RP2040 datasheet
pico_generate_pio_header(WS2812_eigen 
${CMAKE_CURRENT_LIST_DIR}/ws2812.pio OUTPUT_DIR 
${CMAKE_CURRENT_LIST_DIR}/generated)

target_sources(WS2812_eigen PRIVATE ws2812.c)

target_link_libraries(WS2812_eigen PRIVATE
                    pico_stdlib hardware_pio
                     )

# create map/bin/hex/uf2 files
pico_add_extra_outputs(${PROJECT_NAME})

# Additionally generate python and hex pioasm outputs for inclusion in 
the RP2040 datasheet
add_custom_target(pio_ws2812_datasheet DEPENDS 
${CMAKE_CURRENT_LIST_DIR}/generated/ws2812.py)
add_custom_command(OUTPUT ${CMAKE_CURRENT_LIST_DIR}/generated/ws2812.py
        DEPENDS ${CMAKE_CURRENT_LIST_DIR}/ws2812.pio
        COMMAND Pioasm -o python ${CMAKE_CURRENT_LIST_DIR}/ws2812.pio 
${CMAKE_CURRENT_LIST_DIR}/generated/ws2812.py
        )


Als nächstes werde ich mich mal ins PIO-Gedöns stürzen....

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.