Raspberry Pi Pico - Créer son projet C/C++

26 décembre 2022

Pré-requis : avoir installé le SDK du Raspberry Pi Pico et avoir un répertoire vide pour le projet.

Les grandes étapes :

  1. S’assurer de que PICO_SDK_PATH pointe bien vers le SDK
  2. Copier le fichier pico_sdk_import.cmake dans le répertoire du projet
  3. Utiliser un CMakeLists.txt "minimal"
  4. Répertoire de build : mkdir build ; cd build

 Vérification du PICO_SDK_PATH

Le plus simple :

echo $PICO_SDK_PATH /home/.../Projets/RpiPico/pico/pico-sdk

Si la variable n’est pas définie, l’une des solutions est d’éditer votre fichier .bashrc et de rajouter, en fonction de votre installation :

~/.bashrc export PICO_SDK_PATH=/home/.../Projets/RpiPico/pico/pico-sdk

 Copier le fichier pico_sdk_import.cmake dans votre projet

Rien de sorcier, tant que vous savez où trouver votre fichier :

À la racine de votre projet cp $PICO_SDK_PATH/external/pico_sdk_import.cmake .

 Fichier CMakeLists.txt

Ceci n’est pas le CMakeLists.txt minimal, mais celui que nous utilisons. Il contient deux ajouts :

  • L’ajout de la cible Flash, pour compiler et programmer le Rpi Pico d’une seule commande
    • Merci à @madahin [Sharp’Attack] pour son aide avec cmake !
  • La suppression de la conversion automatique des ’\n’ en ’\r\n’.

CMakeLists.txt cmake_minimum_required(VERSION 3.13) # Requis pour initialiser les variables liées au SDK du Rpi Pico include(pico_sdk_import.cmake) project(MonProjectRpiPico C CXX ASM) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) pico_sdk_init() # add_executable : nom de l'executable "MonExecutableRpiPico" suivi des fichiers à compiler. add_executable(MonExecutableRpiPico MonFichierSource.c ) # printf vers USB CDC, pas vers l'UART pico_enable_stdio_usb(MonExecutableRpiPico 1) pico_enable_stdio_uart(MonExecutableRpiPico 0) # Requis pour générer le .uf2 pico_add_extra_outputs(MonExecutableRpiPico) # Notre projet suivi des librairies appelées, notamment celles du SDK. target_link_libraries(MonExecutableRpiPico pico_stdlib) # Ajout de la cible Flash, qui programme le Rpi Pico après avoir add_custom_target(Flash DEPENDS MonExecutableRpiPico COMMAND sudo picotool load -f ${PROJECT_BINARY_DIR}/MonExecutableRpiPico.uf2 ) add_compile_options(-Wall) # Suppression de la conversion automatique LF -> CRLF add_definitions(-DPICO_STDIO_ENABLE_CRLF_SUPPORT=0)

 Répertoire de compilation

Enfin, parce que c’est une bonne pratique et qu’éviter de mélanger les fichiers de compilations avec les fichiers sources est une très bonne idée. Et surtout qu’avec cmake, vous allez obtenir 247 répertoires et 501 fichiers - uniquement pour le code de démonstration...

À la racine de votre projet mkdir build

 Testez !

Copier l’un des fichiers d’exemple, comme hello_usb.c ou blink.c dans votre fichier MonFichierSource.c.

Entrer dans le répertoire de compilation, actualiser votre chaîne de compilation et compilez :

Compilation cd build/ cmake .. make Flash

Si votre Pico est en mode BOOT ou a l’USB d’activé, vous devriez le reprogrammer avec succès.

 Un mot sur les bibliothèques du SDK

Ce qui suit est grandement extrait de ’Raspberry Pi Pico C/C++ SDK’.

Chaque bibliothèque du SDK est considérée comme une interface au sens de cmake. Elle contient notamment :

  • Les fichiers "include"
  • Les fichiers sources
  • Les options de compilation

Par rapport à des bibliothèques pré-compilées, ceci permet avec un seul dépôt de code, de compiler les bibliothèques avec différentes options, d’obtenir les bibliothèques personnalisées pour notre puce, sans code "mort" qui traîne dans la bibliothèque embarquée et sans impacter les autres projets.

Cette modularité a un coût, chaque bibliothèque doit être ajoutée dans le CMakeLists.txt, en plus des #include à rajouter dans le code. Les noms des modules à rajouter dans le CMakeLists.txt sont indiqués dans `Raspberry Pi Pico C/C++ SDK`, dans `4.1. Hardware APIs` et les autres titres 4.x. Pour les noms exacts des fichiers .h à mettre dans les #include, ils sont parfois précisés dans la documentation Doxygen du SDK.

 Le SDK dans le détail

Rajouter un module dans la liste target_link_libraries ajoute un chemin où chercher les #include. Par exemple, ajouter hardware_pwm, rajoutera le chemin :

$PICO_SDK_PATH/src/rp2_common/hardware_pwm/include/

Vous le trouvez avec la commande `find $PICO_SDK_PATH/src -name "hardware_pwm"`

En regardant le contenu du répertoire, vous trouverez les noms des includes :

tree $PICO_SDK_PATH/src/rp2_common/hardware_pwm/include/ └── hardware └── pwm.h

Donc vous devrez inclure "hardware/pwm.h" pour compiler vos fichiers utilisant les fonctions PWM.

Commentaires

Il n'y a pas de commentaires

Ajouter un commentaire

Pseudo :
Mail :

Texte :

Copyright "POIVRON" 2011-2021, tous droits réservés
Administration du site