Cela fait plus de 20 ans que je développe en C/C++ mais je connais très peu Arduino, j'en fais surtout un tout petit peu depuis que j'ai lancé mon fils dans les joies du code.
Je voudrais me mettre aux ESP32 et j’étais initialement dans l'idée d'utiliser esp-idf qui exploite freertos que j'apprécie beaucoup aujourd'hui (sur autres choses que des arduino ou esp) mais quelqu'un m'a expliqué qu'il n'y aurait pas de librairies dans esp-idf (ftp, ntp, serveurs web, mqtt etc) et qu'il vaudrait mieux utiliser Arduino qui a sa propre logique, avec des ServiceMachin.Loop(), sans OS, afin de profiter de pleins de super librairies.
Par ailleurs je vois que freertos existe pour Arduino. Mais alors où est ou où s'arrète la logique "framework" de Arduino si freertos est possible
Du coup je suis allé voir la doc de Arduino et si je trouve la description de fonction, structures and co et une courte phrase qui parle de "language" et pas de "framework", je ne trouve pas la philosophie du truc, je n'ai même pas trouvé la logique de base du setup/loop.
La question du choix entre esp-idf ou Arduino est le fond de la question mais avant cela, quelle est la philosophie de Arduino (le code) ? Y a t-il une logique fonctionnelle imposée aux libs pour être tamponnées Arduino ? freertos y a t-il sa place alors que tout semble proposé pour fonctionner en monothread ?
Merci par avance, en espérant que ma question soit claire.
PS : dans tous les cas je ne ferai pas joujou avec Arduino IDE, ce sera via visual studio code ou autre.
Arduino pour ESP32 n'est qu'une une 'couche' sur le SDK d'Espressif, FreeRTOS y est nécessairement à l'oeuvre sous le capot....on ne fonctionne pas 'sans OS' , juste sans OS visible.
C'est accessible à la demande , caché sinon pour faciliter l'accès aux débutants. (=ADN Arduino)
Quand tu installes l'extension ESP32 pour 'Arduino' tu installes de fait le SDK avec sa collection de fonctions , drivers, bibliothèques.....conçues par Espressif pour ses divers ESP32
La taille de la communauté Arduino explique le grand nombre de bibliothèques disponibles, avec pour celles-ci un 'style
PlatformIO sous VsCode devrait faire ton l'affaire pour 'profiter de plein de super librairies' et , si l'envie t'en prends agir explicitement au niveau de RTOS, jouer avec les 2 coeurs....... la 'couche Arduino' reste ouverte, quelques exemples
Depuis votre réponse hier je cherche à comprendre mais soit on ne parle pas de la même chose , soit il y a un loup
L'OS est géré globalement au niveau de l'appli, pas sous le capot des libs.
Si on a du FTP, du websocket, du filesystem et du MQTT en même tmeps on ne vas pas faire tourner 4 freertos chacun dans leur coin sou le capot.
Le lien git hub montre une implémentation classique de freertos, au global au niveau de l'appli ce qui de ce que je comprends n'est pas la mise en œuvre prévue pour les libs arduino qui seraient faites pour tourner en boucle dans loop() et sans OS.
pour information le code de main.cpp utilisé systématiquement par la chaîne de compilation pour tout 'sketch' Arduino' pour ESP32 en setup() + loop() bien entendu.
Oui, c'est bien ce que dit fdufnews@al1fch , les librairies utilises un OS.
Lorsque tu es sur ton PC et que tu lance Excel et un browser WEB, ils n'ont pas chacun leur OS ?
Une librairie ne tourne pas, l'appli appelle ses methodes ou fonctions.
Comme te l'a fait remarquer @al1fch setup et loop sont appelées dans un thread FreeRTOS. Ensuite libre à toi de lancer d'autres threads pour tes propres besoins.
Ok mais là vous me décrivez une applis qui tourne sous freertos, je connais ça et je me doute qu'on peut faire tourner freertos avec Arduino.
Ma question porte sur la logique d’utilisation du framework Arduino et de ses lib qui serait de ce qu'on m'explique autre part fait pour tourner sans OS mais je ne trouve pas ces règles d'usage.
La première réponse de @al1fch m'explique que ces libs fonctionneraient avec un OS caché et donc je pense qu'il y a confusion puisque l'OS est en aucun cas masqué quand il y en a un vu que c'est lui qui orchestre tout et puisque une lib (ftp, websocket ou autre) ne va pas implémenter en cachette un OS juste pour elle.
Ma question n'est pas de savoir comment faire tourner freertos mais de savoir comment le frameword Arduino (si c'est un framework) prévoit que les libs soient construites et utilisées.
Peut être qu'il n'y en a pas de règles (j'en ai pas trouvé dans la doc) mais du coup la question pourrait être reformulée en "c'est quoi les limites de Arduino ? qu'est ce qui fait qu'on fait de l'Arduino ou pas? que doit on respecter pour en faire sans être un barbare ?"
J'ai l'impression que vous ne parlez pas de la même chose.
Il y a d'une part les micros basiques tel que l'atmega328p qui "a ce que j'ai compris" n'utilisent pas freertos.
Et d'autre part les ESP32 (et peut-être d'autres micros qui utilisent de base freertos ne serait-ce que pour gérer les multicœurs ou le wifi simultanément à la programmation.
Pour moi cela ne concerne pas Arduino, c'est dépendant du microcontroleur et de ce que l'on veut faire avec.
Pour moi ESP32, STM32, RP2040 ne reprennent que le nom et la finalité des fonctions Wiring/arduino.
Le code est le leur et ne peut pas être comparé au code arduino.
Jusqu'à preuve du contraire le vieil électronicien que je suis (pas informaticien) reste sur l'idée qu'Espressif pour promouvoir ses microcontroilleurs SOCs ESP32 auprès de novices a pris le temps de produire une 'couche Arduino ' qui masque autant que faire se peut le fonctionnement de l'OS qui anime la puce et facilite ainsi une adoption basique pour un utilisateur de carte à microcontrolleur 8 bits UNO , Nano, Mega
Cette catégorie d'utilsateur en conservant ses habitudes peut tirer un certain profit de ces puces .
L'examen de fichiers du 'core ESP32 pour Arduino' permettrait il me semble de voir la réalité sous-jacente.
Ma question porte sur la logique d’utilisation du framework Arduino et de ses lib qui serait de ce qu'on m'explique autre part fait pour tourner sans OS mais je ne trouve pas ces règles d'usage
Pour ma part je ne connais pas d'exposé clair et précis à ce sujet
l'OS est le programme qui se lance au démarrage de la machine (ton microcontrôleur dans ton cas).
Les fonctionnalités offerte par l'OS sont disponible par le framework(couche d'abstraction) de celui-ci.
A priori quand tu utilises un ESP32 expressif à implémenter le Framework Arduino par dessus freeertOS.
Donc si tu te cantonne à utiliser le framework Arduino, l'OS est "caché", mais tu peux très bien utiliser conjointement le framework FreeRTOS, si tu le désires.
Sur les Arduinos officiels, jusqu'à peu, tu utilises uniquement le framework Arduino, qui n'utilise pas freeRTOS dans son implémentation.
Je crois d'ailleurs avoir vu sur le site FreeRTOS, qu'il a été porté sur les architectures AVR(pas que 32bits), mais c'est hors sujet
Donc je pense que cela répond à ta question initial de savoir ou s'arrête le framework Arduino, d'un autre framework comme celui pour accédé à freeRTOS.
Après tu peux mélanger les frameworks, mais comme bien souvent, si on ne maitrise pas exactement ce que l'on fait, cela peut mener à de gros soucis, difficile à debugger.
Ça expliquerait pourquoi je n'aurais pas réussi à le trouver alors, piouuuu
J'ai l'impression que Arduino n'est qu'un nom donné au fait de programmer un système embarqué en utilisant une couche HAL faite pour que le choix du matériel soit masqué et que la compatibilité des libs arduino avec les pratiques du "framework" ne seraient que la conséquence logique du "il faut bien que ça marche", sur le modèle des premiers Arduino qui ont tourné et des éventuels besoins de cartes plus puissantes.
Je vais tenter de faire des choses avec le Wifi,SD et je sais pas quoi avec esp-idf ET plateformeIO (j'ai réussi à faire tourner un hello world sur les 2), je verrai où les libs et démos me mènent.
L'OS est le programme qui gère entre autre les ressources, les jobs(threads), ...
Si tu veux interagir avec l'OS, pour avoir accès au différentes ressources ou jobs(threads), tu utilise le Framework offert par l'OS.
Je ne sais pas sur quel OS, tu développe en C++, mais pour accéder au ressource de ta machine, tu utilise des fonctions offertes par ton OS ?
juste Arduino ne veut pas dire grand chose, si tu es sûr une implémentation sans freeRTOS, il n'y a pas de freeRTOS.
A priori(je n'ai pas était voir) Expressif à développer leur couche(Framework) Arduino par dessus freeRTOS,
Si j'ai bien compris les autres intervenants, il t'indique que Expressif a implémenté la couche Arduino, pour que les fonctions de base d'Arduino soit exécuter sur l'un des cœurs du µC, via justement les fonctions de freeRTOS.
Presque, si as ta couche d'abstraction, tu rajoute un IDE, une chaine de compilation près à l'emplois ou plus simplement un ensemble cohérent de composant logiciel, tu as fait un Framework.
loop() est une tâche.
D'ailleurs on le voit lorsqu'on bloque l'exécution de loop() par une attente trop longue ou une boucle infini. On a un core panic avec un reboot.