You are on page 1of 125
© ELECTRONIQUE | EMBARQUE | RADIO | |OT N° 40 JANVIER / FEVRIER 2022 9°) HAC KABLE | ‘iii L'EMBARQUE A SA SOURCE ——— > RP2040 / CMAKE stws2/ 608 Créez votre écosystéme de bibliothéques Déboguez vos codes via SWD sans utiliser personnalisées pour le SDK Raspberry Pi Pico p.04 | OpenOCD grace a Black Magic Probe p.54 EPA E IAD Gi MA Gastita) Cy CEE . 2. p.72 ee - Comprendre le eek all 4 - Ecrire un premier eee) BU Ta Muri llee et le framebuffer Cee aaa EOS $3 : le premier eFPGA avec sa chaine Deemer PAP eurua suet ed Cet Me aC cet ee I) irtee WIKIMEDIA FRANCE Grace a votre contribution, les projets Wikimédia existent en toute indépendance, des contenus sont libérés, de jeunes publics sont sensibilisés au numérique et la connaissance est un peu plus accessible 4 tous chaque jour Ld Le saviez-vous ? Votre don est déductible des cra impéts. Un recu fiscal vous sera adressé par courrier a réception de votre don PPM mica au ems ley - EDITO Laan Ao 0 sede tn Se ee 2 a Seta eres ‘vente sure store pour quelques 40€. Ace prix, vous Setanta Pasar Spupgieecsmmecae tie Shel Rance eet ee ee Se ene poe Sane ate dose engi tree cee open tn Pott gin AS Saecrecca bag tea ate es eae a a oes Tree ceca! use persceeefalpe Sanam ata ae ata Seen ee re ena Souhocs en ma scoces oe eee Star res tapos ra ee EE apn nag eres on nee Sfeeeic genres cancer See. Tage can octane ae et ere heen ears ae coe eae es Pe er co me i nr a Srloces a eae eee Sy jcremna veremaea ese eae See cer cheese ceet a eget ate Se a oar een ne Tawa yunnt eeeetabsvaeaee sae elses nate Wein Beoee Hackable Magazine ‘Servic de eas: Abpmareue: 095515217 ‘st par Les tons Damond Soe Rigen my EorTiQNs Gar oro ‘Pet nent - ric deve: 1490¢ — ‘asin rp pei sn ats ‘pm psec pee aya a ne et ‘eeepc pi salve a jnanan | Tontescettecomintini orien _ @hackablemag ‘APROPOS DE HACKABLE... HACKS, HACKERS & HACKABLE (Ce magazine ne raite pas de piratage. Un hack. SOMMAIRE Ulla Tele eRe elle Lo) 04 Intégrer vos propres bibliothéques dans le SDK Raspberry Pi Pico 16 Le premier FPGA avec sa chaine de développement open source Cee ake s ey 54 Black Magic Probe déboguez vos codes avec facilité et a 72 Développement baremetal sur Raspberry Pi3 86 Développement baremetal sur Pi3 : mailbox et framebuffer CERN LULS 100 Chisel, construire du matériel en langage Scala ABONNEMENT 39 Abonnement lune solution rapide et ricolée pour régler un probleme, tant élégante, tantétbroullonne, mais ‘jtématiquement erative. Les personnes ullisant ce type de techniques sont appelées hackers, quelque sit Te domaine fechnelogique, Cest un abus de langage mediate que de confone «pirate informatique» et« hacker» Le nom de ce magarine ae choisi pour refeer cette ton de bidoullage ercait suria ove d'un terme ute dans sa definion legit vértable et historique, HackasLe MAGAZINE N‘ao | 3, Ee MICROCONTROLEURS & ARDUINO INTEGRER VOS PROPRES BIBLIOTHEQUES DANS LE SDK RASPBERRY PI PICO Denis Bodor La richesse d’un environnement et d’un framework dépend de nombreux éléments. Nous avons la ou les plateformes matérielles elles-mémes, la qualité de l'environnement de développement, le nombre d’exemples permettant de prendre en main le microcontréleur et enfin, la disponibilité de codes réutilisables permettant d’étoffer ses propres projets avec un minimum de travail : les bibliothéques. Sur ce point, la Pico ne dispose pas de solution entiérement clé en main (pour V’instant), mais la structure du SDK permet une approche relativement efficace. www.ed-diamond.com 4 | HACKABLE MAGAZINE N40 RP2040 - Bibliothéques = Intégrer vos propres bibliothéques dans le SDK Raspberry Pi Pico — es exemples accompa- gnant le SDK ‘du RP2040 permettent de découvrir et de comprendre utilisation de bon nombre de ses fonctionnalités, sinon toutes. Mais pouvoir utiliser un bus SPI ou ic n'est géné ralement qu'une part du probléme lorsqu’on cherche {a mettre en ceuvre un com- posant précis. Si vous jetez un ceil a ces exemples et en particulier aux sources dans i2c/mpu6050_izc et dans spi/bme280_spi, traitant respectivement de utilisation d'un accéléro- _métre/gyroscope InvenSense MPUG0SO et d'un capteur environnemental (tempéra- ‘ture/hygrométrie/pression) Bosch BME280, vous remar- ‘querez que la gestion de ces composants se fait au sein ‘méme du code, et non sous une forme « satelitaire » Lune des forces du frame- work Arduino est sa capa- cité & proposer aux déve- loppeurs une vaste collection éléments sous forme de bibliothéques, facilement ins- tallables et intégrables a ses projets. Comme le montrent les deux exemples précé- dents, il n’en va pas de méme avec le SDK du RP2040. Si vous souhaitez développer ‘une solution domotique rrégulant votre chauffage, ln a pas de bibliothéque BME280 clé en main a télécharger, a copier dans votre projet et a simplement utiliser. Dans Vabsolu, vous serez obligé de comprendre la documentation technique (datasheet) du com- osant et c'implémenter votre solution (ou de porter le code de ‘quelqu’un depuis un autre frameworld. est important ici de rappeler que la notion de « biblio- théque » est souvent utlisée avec une certaine liberté. ‘Techniquement, une bibliothéque est simplement une col- lection de routines pouvant étre réutilisées dans plusieurs programmes, mais la forme la plus courante consiste en un ensemble de fichiers objet, compilés,réunis dans une archive et liés statiquement ou dynamiquement avec le code principal. En développement sur microcontréleur et, a fortiori, sans sys- téme d'exploitaion, il est cependant bien plus simple de tout conserver et distribuer sous forme de fichiers sources. Archiver les objets d'une bibliothéque post-compiation pour ensuite directement les passer & l'éditeur de liens serait une perte de temps et de cycles CPU. Avec la plupart des environnements, les bibliotheques sont done simplement des fichiers C/C++. Ce que propose Arduino est tout a fait possible avec le SDK RP2040 ou n’importe quel framework, puisque la pro- blématique est nativement traitée par les compilateurs et les systémes de construction (comme CMake). Ce qui fait cruel- Jement défaut au SDK nest en réalité qu'une architecture centralisée permettant la recherche, le référencement et le ‘téléchargement de ces bibliothéques. En attendant qu'une telle initiative soit mise en ceuvre pour permettre un échange simplifié de ce type de ressources, nous pouvons déja opter pour une approche locale. L'idée consis- tera donc ici a prendre 'habitude de factoriser son code si on Je juge réutilisable, voire distribuable. Partant d'un code fone- tionnel, ceci se fera en deux étapes : isoler la ou les fonctions au sein méme du projet, puis retirer ce code du projet pour le placer ailleurs et le rendre disponible partout 1. ISOLER AVANT DE FACTORISER En guise d’exemple, nous allons réutiliser un projet issu d'un article précédent (Hackable 38, page 16 [1 Cel traitait de la possibilité de retrouver, depuis notre code pour 1a Pico, les informations binaires embarquées par le SDK et habituellement consultables via Youtil picotool. L’exemple HACKABLE MAGAZINE N“40 | 5 rae MICROCONTROLEURS & ARDUINO | en question et ce qu’ permet de faire n'ont strictement aucune importance. Ce qui en a, en revanche, est le fait que nous avions décidé de structurer notre code en réunissant toutes les opérations dans une fonction, quil nous suffisait ensuite d’appeler depuis main(). est la, généralement, la premiére étape dorganisation pour éviter de se retrouver avec une salade de code ingérable et surtout incompréhensible, au bout de quelques heures de dévelop- pement. Nous nous étions done arrétés sur ceci : include include include const char * getBIstr(uint32_t id) { const uint32_t *base (const wint32_t *) (XIP_BASE + 0x100); uint32_t *bistart = NULL; uint32_t *biend = NULL; uint32_t *bimapping = NULL; for(uint i = 0; i < 64; i4+) { if (base[{] == BINARY_INFO MARKER START) ( if (i+4 < 64 G& basa[it4] == BINARY_INFO_MARKER_END) { bistart = (uint32_t *) base[iti]7 biend = (uint32_t*) base[it2]; bimapping = (uint32_t *) base[it3]; re , y Af(!bistart || !biend || !bimapping) ( return (NULL) ; » for(uint 4 = 0; 4 < (biend-bistart); i++) ( binary_info core t *binfocore_t = (binary Info Gore t *) bistart[i}; Af (binfocoze_t-Stype == BINARY_INFO_TYPE_ID_AND_STRING) { binary info id and string t 7binfo t (binary info id_and string t *)Bistart(i]; if (binfo_t=>id == Ta) roturn{binfo_t->value) ; ) » return (NULL) ; ) int main() { stdio_init_all(); print# ("\033[2J\033 [H") ; print£(">> ts [$s] - Build %s sDKvés\n", getBIstr(BINARY_INFO_ID_RP_PROGRAM NAME), 6 | HACKABLE MAGAZINE N°4o | www.ed-diamond.com RP2040 - Bibliotheques ~ Intégrer vos propres bibliothéques dans le SDK Raspberry Pi Pico — getBIstr (BINARY_INFO_ID RP PROGRAM BUILD ATTRIBUTE) , jetBIstr (BINARY_INFO_ID_RP_PROGRAM_BUILD_DATE_STRING) , getBIstr (BINARY_INFO_ID_RP_SDK_VERSION) )7 while (true) ‘tight_loop_contents () ; 1 sagit a d’une simple fonction getBIstr() retournant un pointeur vers une chaine de caractéres a partir d’une macro passée en argument, correspondant & Yinformation & remon- ter, appelée plusieurs fois depuis main( ). Ceci peut étre intéressant pour nombre de projets et ous pouvons, dans un premier temps, rendre le tout beaucoup plus réutilisable en répartis- sant simplement le code différemment. Nous déplacons donc la déclaration de la fonction dans un fichier distinct, biflash.c. Comme cette fonction a besoin d'un certain nombre de déclarations faites par ailleurs (pour XIP_BASE, uint32_t, binary_info_core_t, etc), nous devons inclure des fichiers den-téte Notre fichier source original, nain.c, doit également avoir connaissance de existence de cette fonction et ses propres #include. Il faut bien comprendre, en effet, que biflash.c et main.c seront compilés séparément, ce sont des unités de compilation distinctes. Pour régler le pro- bléme, nous devons donc déclarer le prototype d'une fonction indiquant au compilateur que getBIstr() existe ailleurs que dans main. et fera son apparition lors de Védition de liens Pour tout régler en une fois, nous allons simplement créer un bifLash.h ayant un double ‘usage : inclure les en-tétes'pour biflash.c et embarquer notre prototype : finclude #include const char * getBIstr(uint32_t id); Ce fichier sera inclus dans bifLash .c ainsi que dans main .c, ol: nous nous retrouvons avec le strict minimum #include #include #include #include "biflash.h” int main() { stdio init all(); peint#("\033[29\033(8") ; PEint£(">> %s [8s] - Build 4s SDKvés\n", ‘getBIstr(BINARY_INFO_ID_RP_PROGRAM NAME) , getBIstr (BINARY_INFO_ID-RP-PROGRAM BUILD ATTRIBUTE) , getBIstr (BINARY_INFO_IDRP-PROGRAM_BUILD_DATE_STRING) , getBIstr (BINARY_INFO_1D_RP_SDK_VERSION)) 7 while (1) ‘tight_loop_contents() ; www.ack HACKABLE MAGAZINE N'40 | 7 ee MICROCONTROLEURS & ARDUINO Pour que la construction réussisse, il nous reste une derniére étape, car nous devons dire a CMake qu'un autre fichier a été ajouté dans notre pro- jet. Nous éditons donc également notre CMakeLists. txt pour le modifier en conséquence Tees # sources t (SOURCE_FILES main.c biflash.c) en aapberry PiPice # binaize et sources papers add_executable ($ (CHAKE_PROJECT_NAME) Garasedatapoe oe imatpodiele ) talobect eee foncttonnaleo abe {Usb bouton reset a Et voila ! Non seulement notre petit projet a gagné en organisation, mais, oes sinous voulons intégrer cette fonctionnalité dans un autre développement, epureé de ce qui vous cela devient un jeu d’enfant. Nous rvavons qu’a y copier biflash.c et ext livré: pas de boite, biflash.h, faire quelques ajustements et le tour est joue. pas de cable, pas de notices, pas de broches Vous n’aimez pas copier a souder. des fichiers et avoir plein de sources identiques impos- sibles a maintenir ? Ga tombe bien, moi non plus. Poussons donc un peu plus loin. 2. CREER SON JEU DE BIBLIOTHEQUES LOCALES En étudiant le fonction- nement du SDK et de ses différentes configurations CMake, on se rend rapi- dement compte qu'il est parfaitement possible d’uti- ser la méme architecture pour intégrer facilement des bibliothéques dans ses 8 | HACKABLE MAGAZINE N>4o RP2040 - Bibliotheques ~ Intégrer vos propres bibliothéques dans le SDK Raspberry Pi Pico — projets. Pour rappel, le SDK lui-méme est placé, quelque part dans le systme, dans un réper- toire pico-sdk, mais ce n’est pas tout. Les exemples trouvent place dans pico-examples, des bibliothéques complémentaires dans pico-extras et les codes en faisant la démonstration sont dans pico-pLayground. Le tout est pointé par un ensemble de variables d'environne- ‘ment que j'ai choisi de configurer via un fichier picoenv.sh sourcé depuis mon .bashre (a documentation officielle recommande de tout intégrer dans .bashre) # Chemin pour l'environnement Pico PICO_SDK_PATH=$HOME/PIPICO/pico-sdk PICO_EXAMPLES_PATH=SHOME /PIPICO/pico-examples PICO_EXTRAS_PATH=SHOME/PIPICO/pico-extras PICO_PLAYGROUND_PATH=$HOME/PIPICO/pico-playground # outil Picotool dans le chemin de recherche par défaut PATH=" $HOME/PIPICO/picotool/build: $PATH” # exportation des variables export PICO_SDK_PATH PICO_EXAMPLES PATH \ | PICO_EXTRAS PATH PICO_PLAYGROUND_PATH export PATH Cest grace a ces variables que tous nos projets trouvent le SDK ou les bibliothéques sup- plémentaires lors de lagonstruction des firmwares. Une bonne approche consiste donc & | reproduire ce qui est déja en place, en particulier pour PICO_EXTRAS_PATH/pico-extras. Commencons donc par ajouter un répertoire Ia ol se trouvent tous les autres éléments et créer une nouvelle variable d’environnement pointant vers cet emplacement HOME / PIPICO/mypic Pour obtenir ce que nous voulons imiter, il suffit d’observer le contenu de pico-extras : Peerese sete te eee ees phrenic eee eects cetera pico_sdk_import .cmake est un fichier copié depuis pico-sdk/external permettant @initiliser le SDK dans nos projets. Comme détaillé dans Varticle sur Vinstallation du SDK dans Hackable 37 [21 je préfere généralement référencer directement ce fichier plutot que de le copier, afin de rester & jour vis-i-vis de la version Git du SDK. On retrouve ici également un répertoire external contenant pico_extras_import.cmake qui doit étre utilisé de la méme maniére, si 'un de nos projets (comme ceux dans pico-pLayground) utilise une bibliothéque wwwnackable.tr | HACKABLE MAGAZINE N'40 | 9 aes MICROCONTROLEURS & ARDUINO de pico-extras. Nous trouvons également un CMakeLists.txt et surtout le répertoire sre contenant toute une arborescence jusqu’a chaque source en C, avec & chaque étape un nouveau CHakeLists. txt. Liidée derriére cette structure consiste a inclure le fichier présent dans external dans le | CNakeLists.txt de son projet, sachant que ce qu'il contient ne fait qu'une chose : intégrer un sous-répertoire supplémentaire dans la construction (ou build) via add_subdirectory(). Ce répertoire est spécifié avec un chemin absolu et c’est donc toute Parborescence qui est ajoutée, en prenant au passage en compte tous les CMakeLists. txt quis'y trouvent. Le mécanisme est assez astucieux, car ce . cmake est dans un sous-répertoire qul est totalement ignoré du CMakeLists. txt parent. Vous allez comprendre.. Dans notre répertoire fraichement créé et désigné par PICO_MYLIB_PATH, nous allons immédiatement ajouter un répertoire external comprenant un fichier mypico_libs_ import .cmake contenant : Af (DEFINED ENV(PICO_MYLIB_PATH)) st (PICO_MYLIB_PATH SENV(PICO_MYLIB_PATH)) endif () Af (WOT EXISTS §(PICO_MYLIB_PATH)) message (FATAL ERROR "Directory '${PICO_MYLIB PATH)’ not found") endif () message ("PICO MYLIB PATH is $(PICO_MYLTB PATH)") add_subdi rectory (${PICO_MILIB_PATH} pico_mylib) Les deux conditions if ne sont la que pour nous assurer de lexistence de la variable d'envi- ronnement et du répertoire en question, Dans le SDK, le . make peut également provoquer le téléchargement des éléments manquants si nécessaire (doi la copie du fichier, préconisé par la documentation officielle). Aprés laffichage d'un bref message, nous demandons & CMake de prendre en compte toute répertoire pointé par PICO_MYLIB_PATH. Le second parametre de ‘add_subdirectory() précise ot placer les fichiers générés, sachant qu’ici nous n’obtiendrons rien puisqu’il ne s/agit pas d'un projet, mais de biblioth@ques & ajouter & un projet existant. En incluant ce fichier dans le CHakeLists.txt d'un de nos projets, nous ferons de Varbo- rescence PICO_MYLIB_PATH une partie intégrante du build et nous devons donc y ajouter un CHakeLists. txt: cmake_minimum required (VERSION 3.12) include (SENV{PICO_SDK_PATH)/external/pico_sdk_import .cmake) Project (pico_mylib) pico_sdk_init() add_subdirectory (src) 10 | HACKABLE MAGAZINE N40 mond.com RP2040 - Bibliotheques ~ Intégrer vos propres bibliothéques dans le SDK Raspberry Pi Pico — ‘Nous retrouvons la les éléments classiques minimaux permet tant a construction d'un projet avec le SDK. Un nom de projet est nécessaire pour pouvoir initialiser le SDK, ceci s‘avérera utile par Ja suite. Et nous concluons par 'ajout du sous-répertoire sre. Larborescence est destinée & accueil, terme, plusieurs, bibliothéques et nous nous inspirons de la logique de pico- extras. src contiendra donc un sous-répertoire par bibliothéque ainsi qu'un CMakeLists. txt les listant sous la forme d'une série de add_subdirectory(). Ict un seul add_subdirectory (getbiflash) Ici, notre premiére bibliothéque, permettant de lire des infor- mations binaires dans la flash, sera placée dans getbiflash (notez que emplacement est relatif, par opposition au contenu du . cmake). On retrouvera, & cet endroit, le fichier source en C biflash.c, un texte cexplicatif README .md, un sous-répertoire include/nypico/util contenant biflash.h et un dernier CHakeLists. txt : add_library (getbiflash INTERFACE) target_include directories (getbiflash INTERFACE ‘$(CMAKE_CORRENT_LIS7 DIR) /include d target_sources(getbiflash INTERFACE $(CMAKE_CURRENT_LIST_DIR}/biflash.c ) add_Library() nous permet d’ajouter une cible qui est une bibliothéque et non un exécutable. L’ajout de INTERFACE précise & CMake que nous ne sou- haitons pas réellement créer une hibliotheque au sens « systéme » du terme (comme un .50 ot .a sous GNU/Linux, ou une DLL pour Windows), mais un jeu de sources supplémentaires qui s'intégreront & notre bulla. Comme le précise la documentation officielle [3], dans le SDK RP2040, toutes les biblio- théques sont des INTERFACE, Nous précisons ensuite oit se trouve les headers associés, ainsi que les sources. Notez que nous avons ici un petit changement par rapport au code précé dent, biflash.h est placé dans include/nypico/util et biflash.c doit tre ajusté dans ce sens en débutant par : finclude “mypico/util/biflash.h' Notre main. n’aura pas connaissance de Yarborescence PECO_MYLIB_PATH et nous y inclurons biflash.h de la méme maniére, avec le méme chemin Comparer la Pico a une carte Arduino d’un point de vue matériel est une démarche injuste pour une plateforme comme pour Vautre, En réatite, Tes ressources offer ine sont qu'un élément de a comparaison et it est également nécessaire eprendre en compte Vécosysteme existant. La Pico est plus récente et done plus avancée techniquement, mais Tarduino est plus ancien et représente une solution plus accessible pour les debueants. www hackable.te | HACKABLE MAGAZINE Nv4o | 11 MICROCONTROLEURS & ARDUINO relatif a Yemplacement de biflash.c et du présent CMakeLists.txt. Ajouter deux sous-répertoires peut sembler inutile, mais ceci nous permet de désigner le fichier explicitement et sans ambiguité. Sicela vous parait un peu confus, voici a quoi ressemble notre hiérarchie aprésent ES Sere fearove seer oss Gea Hy es enh) he tres Sree rtellattion de profets tee et dela production ee ad stair mares] aoe Notre «stock» de biblotheques ext plaeé dans mypico-Libs/, chacune ombrewser)ustfent | elle aura son propre répertoire dans sre/ et elute sera lsté dana es 4. typico-Libs/src/CMakeLists. txt. Nous venons de littéralement efforts d’adaptation créer notre équivalent privé de pico-extras, Pour utiliser cela dans un projet, voici ce que nous avons a faire : + inclure le header dans nos sources : #include ; + inclure le fichier . emake dans le CHakeLists. txt include ($ENV{PICO_MYLIB_ PATH} /external/nypico_ Libs_import.cnake) penser spécifier utilisation de la bibliothéque dans le CHakeLists.txt: target_ Link Libraries (${CMAKE_ PROJECT_NAME} pico_ stdlib getbiflash) + utiliser joyeusement la fone tion getBIstr() ! 42 | WACKABLE MAGAZINE N-ao www.ed-diamond.com RP2040 - Bibliothéques ~ Intégrer vos propres bibliothéques dans le SDK Raspberry Pi Pico — 3, ET SI J'UTILISE LE SOUS-SYSTEME PIO ? Lavantage de ce systéme est d'étre totalement compatible avec la structure du SDK (puisque pico-extras fonctionne précisément ainsi). sera donc possible de lui ser pour tous types de bibliothéques, y compris celles faisant usage de fonctionnalités ‘matérielles particuligres, comme le sous-systéme PIO. Ceci devient particuliérement {ntéressant, car vous pouvez alors regrouper I'implémentation en assembleur PIO et les fonctions utlitaires au méme endroit, a Vextérieur du développement en cours. Liintégration en bibliothéque suivra le méme cheminement que celui que nous venons de voir, mais en prenant également en considération les sources assembleur. Le fichier . pio sera done placé aux cétés du code source en Cet sa transformation en header se fera durant la phase de construction. Liarborescence est donc trés similaire & la précédente evant Persie eects petri ESE Seul le contenu du CMakeLists. txt devra étre adapté add_library(clignoteur INTERFACE) target_include directories (clignoteur INTERFACE '$(CMAKE_CURRENT_L1S7 DIR) /include ) target_sources (clignoteur INTERFACE '$(CMAKE_CURRENT_ LIST DIR) /clignoteur.c ) pico_generate pio header (clignoteur 3{CMAKE_CORRENT_LIST_DIR}/monblink.pio ) target_link libraries (clignoteur INTERFACE hardware_pio ) pico_generate_pio_header() et target_Link Libraries ) permettent respecti vement la génération de monbLink. pio. h (dans le répertoire build du projet) et Pajout de la dépendance vis-a-vis de la bibliothéque hardware_pio. Encore une fois, on pourra intégrer trés simplement cette bibliothéque dans n’importe quel projet en ajustant son CHakeLists. txt et en incluant mypico/pio/cLignoteur.h dans ses sources. wow.nackable.tr | HACKABLE MAGAZINE N'40 | 13 14 | HACKABLE MAGAZINE N°40 | www. MICROCONTROLEURS & ARDUINO 4, POUR CONCLURE Remarquez comme le résultat est élégant et magnifiquement structuré, Nous n’avons ici rien inventé, mais simplement réutilisé architecture mise & notre disposition par le SDK et les fonc- tionnalités de CMake. 1! est méme possible de pousser un peu plus loin pour automatiser encore davantage tout cela. En ajoutant une macro CMake dans le CakeLists. txt présent dans src, nous pouvons nous éviter de devoir lister manuellement les sous-répertoires des bibliothéques : macro(SUBDIRLIST result curdir) file (GLOB subs RELATIVE §{curdir) ${curdir}/*) et (dirlist foreach (sub §{subs}) if (18 DIRECTORY §(curdir}/${sub}) list (APPEND dirlist $(sub}) endif () ndforeach () set (${result} $(dirlist)) ‘endmacro () ‘SUBDIRLIST (SUBDIRS ${CMAKE_CURRENT_SOURCE_DIR}) foreach (subdir $(SUBDIRS}) add_subdirectory ($({subdir}) ‘endforeach () #add_subdi rectory (getbi flash) #add_subdirectory (elignoteur) Ans, & chaque création d'un sous-répertoire dans src, celui-ci et son content seront auto- matiquement pris en compte. A voir toutefois si ceci est réellement souhaitable, en particulier Jorsqu’on met au point le code d'une bibliothéque. Bien entendu, rien ne vous empéche de dlupliquer Yensemble de installation et ainsi de séparer les bibliotheques stables de celles en phase de développement. Quoi quil en soit, le résultat est la et il est parfaitement possible d’envisager de reposer sur une telle architecture, non seulement pour gérer ses propres bibliothéques localement, mais également pour des échanges de code. En effet, les contenus placés au-dela de sre sont totale- ‘ment indépendants de emplacement de Varborescence ou méme de celle du SDK. Ainsi, dif- fuser des archives (ZIP ou tar. xz par exemple) a décompresser directement dans src peut étre une solution pour se rapprocher de quelque chose d’aussi souple que ce qui existe avec Arduino. Ce n’est certes pas aussi clinquant et graphique, mais qui sait, quelqu’un pourrait par- faitement décider de créer une extension VSCode dans ce sens a Vavenir... [1 REFERENCES (1) https://connect.ed-diamond.com/Hackable/hk-038/ pico-acceder-aux-informations-binaires-depuis-votre-code (/ https:/iconnect.ed-diamond.com/Hackable/HK-037/Raspherry-Pi-Pico-Arduino-killer () https:/idatasheets.raspberrypi.orgipico/raspberry-pi-pico-c-sdk pat

You might also like