COMPILATION : attribution des .h

Bonjour à tous ,

en lisant un croquis pour m'en inspirer , j'ai cherché les fichiers .h et .cpp inclus dans le programme pour les analyser.
Il s'agit de - simple controls - exemple inclus dans la librairie RBL_nRF8001 ( je possede la blend micro )

  • j'ai commencé par le repertoire du croquis : rien

  • le repertoire librairies : 5 fichiers differents mais avec le meme nom : boards.h

  • quand au fichier avr/sleep.h il n'est pas present sur ma machine

Je me suis donc demandé comment le compilateur gerait tout ça et activé la preference " verbose " du compilateur. Il emet un certain nombre de warning mais le programme fonctionne.

Quelqu'un pour m'aider à y voir plus clair ?

merci d'avance !

Il y a les .h dans votre répertoire de travail, ceux de la librairie “utilisateur” (Le répertoire dans lequel vous rajoutez les nouvelles lib que vous voulez utiliser) et la librairie système et les outils de l’IDE. Ces 2 derniers sont rangés aux niveau du système ailleurs en fonction des plateformes, sur Mac par exemple ils sont inclus dans le .app (click droit sur l’icône de l’IDE Et demander à afficher Le contenu du package vous y verrez une nouvelle arborescence dans laquelle vous trouverez ce qu’il vous manque)

ensuite suivant si vous utilisez de “” ou des <> pour inclure des .h le pré processeur ira chercher à différents endroits avec un ordre de priorité (y compris des directives de la ligne de compilation)

entendu , merci de votre reponse.
J’avais noté en cherchant sur les forums cette formulation “” ou <>.

Malgré tout je ne sais toujours pas pourquoi le compilateur prefere tel boards.h aux autres ( le repertoire du croquis est vide de .h , tout comme le rep. de la librairie)

ensuite ,en lançant une recherche sur tout le disque ( win8.1 ) je ne trouve pas avr/sleep.h

le compilateur ignore ?

le boards.h provient de votre choix d'architecture (le type de carte choisie pour compiler) - c'est une couche d'abstraction de votre matériel pour que les commandes standard fonctionnent

sur mon mac sleep.h, est là (comme il est au sein du package application, une recherche par le finder ne l'affiche pas, c'est un fichier caché par défaut)

/Applications/Arduino.app/Contents/Java/hardware/tools/avr/avr/include/avr/sleep.h

ok pour le boards.h , je vais chercher lequel est concerné !

Ensuite , je pense que ma lacune de connaissance est en cause pour avr/sleep.h

j’ai cherché sleep.h et l’ai trouvé dans plusieurs repertoires dont un avr…

du coup #include < avr/sleep.h > invoque sleep.h ? cette syntaxe indique < classe/fichier > ?

si c’est cela , comment signifier un autre chemin d’acces au compilateur ?

non ce n'est pas la classe, en simplifiant c'est juste un chemin sur votre disque dur à partir d'un endroit de recherche (mais en détail c'est un peu plus compliqué)

avr/sleep.h fait parti des librairies installées avec le compilateur.
Elles sont dans /hardware/tools/avr/avr/includes/ et ses sous-répertoires
Les librairies du “noyau” Arduino sont dans /hardware/arduino/avr/cores/arduino/
Les librairies supplémentaires Arduino sont dans /hardware/arduino/avr/libraries/
Les librairies et les cartes que tu ajoutes par la suite sont normalement installées dans un sous répertoire de ton répertoire personnel .arduino15 (pas certain que ce soit identique sur toutes les plateformes)

Merci beaucoup , voilà des infos bien utiles !

je suppose que sous windows un / arduino -man ne va pas fonctionner ? ( j'ai essayé , vieux reflexe linuxien :slight_smile:

du coup , si je veux me fabriquer une configuration maison , comment indiquer au compilateur d'utiliser mes .h personnels ?

si certains sont generiques , vais-je creer un conflit ?

beaucoup de questions , je passe peut-etre à coté du manuel détaillé sans le savoir ?

si vous voulez vos .h, mettez les dans votre sketch ou alors groupez les dans un répertoire du même nom que le .h et mettez le avec les librairies téléchargées (fabriquez une librairie)

Il y a aussi la possibilité d'utiliser une IDE comme Eclipse ou Code::blocks.

De la doc existe sur Internet.

J'hesite un peu à changer d'IDE , la carte n'est dejà pas programmable avec la derniere version de celle d'Arduino ( je dois utiliser la 1.0.5 ) pour une raison...que j'ignore !

Pour moi ça veut donc dire une possible ( tres ) longue recherche pour disposer d'une station de travail viable.
Pas de club informatique à proximité où troquer mes connaissances en Electricité contre une bonne mise à jour de mes connaissances en programmation informatique.

Je viens de la logique cablée , les IDE sont une nouveauté ( effective ) depuis quelques jours à peine...
Je serais donc dépendant de la patience des autres ( comme en ce moment )

Le forum dedié à la carte , site constructeur , semble desertique !
Ce choix de carte tout-en-un n'etait peut-etre pas judicieux ?

Merci à vous en tout cas , j'ai de quoi creuser un peu et continuer mon " retro-engineering " :wink:

Pourquoi avez vous choisi cette carte spécialement ?

Je cherchais un moyen pour me connecter à un terminal BLE sur mon iPhone et lui envoyer des signaux midi.

Apres avoir fouiller un peu sur le site -instructables- j'ai vu de nombreux projets DIY qui utilisait de l'arduino pour le faire.

J'ai donc regardé ce qui etait disponible et cette carte semblait parfaite , elle combinait la carte et le module BLE pour un prix raisonnable...

Ok

Le Bluetooth classique permet de créer une liaison continue, un tunnel entre deux appareils, pour transférer et échanger des données sans interruption; Le protocole de communication est défini par des profils (Le plus commun dans le monde arduino est le profil SPP qui transforme votre composant BT en port série our simplifier). Votre iPhone ne supporte d'ailleurs pas le SPP pour des raisons de sécurité.

Le BLE est surtout utilisé dans le transfert périodique de petites quantités de données à courte distance pour récupérer n’importe quel type d’information limitée en stockage. La connexion n’est pas continue et c’est notamment grâce à cela qu’il consomme très peu d’énergie et que nous parlons de Low Energy. Votre objet est un serveur qui met à disposition dans un service des "caractéristiques" et un appareil client (votre iPhone) vient les lire. Cela est définit par le biais d'un profil GATT (Generic Attribute)

Plus d'infos en anglais dans ce tuto anglais

D’accord.

Me voilà avec deux liens utiles pour ceux qui iraient dans ce sens :

Specs officielles chez Apple : https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf

Liste des GATT officielle :

Quid de la non-compatibilité de L'IDE ?

Il s'agit de l'obsolescence de mon materiel ou bien des fichiers/libs fournis par RedBearLab ?

Si je me decide à utiliser Atmel Studio par exemple , quelles etapes vais-je devoir suivre pour assurer la compatibilité de ma carte ?

Je n'ai pas cette carte, je ne peux pas vous dire... désolé
Quelles sont les erreurs, est-ce à la compilation?

je vous expose le message d'erreur :

Arduino : 1.8.2 (Windows 8.1), Carte : "Blend Micro 3.3V/8MHz"

Attention: platform.txt du cœur 'RedBearLab AVR Boards' contiens recipe.preproc.macros="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} {preproc.macros.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" dépassé, converti automatiquement en recipe.preproc.macros="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.flags} {preproc.macros.flags} -mmcu={build.mcu} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} {compiler.cpp.extra_flags} {build.extra_flags} {includes} "{source_file}" -o "{preprocessed_file_path}". La mise a niveau de ce cœur est conseillée.
In file included from C:\Users\mika\Documents\Arduino\libraries\BLE_SDK_for_Arduino\src/hal_platform.h:32:0,

from C:\Users\mika\Documents\Arduino\libraries\BLE_SDK_for_Arduino\src/lib_aci.h:34,

from C:\Users\mika\Documents\Arduino\libraries\RBL_nRF8001\RBL_nRF8001.h:17,

from C:\Users\mika\Documents\Arduino\libraries\RBL_nRF8001\RBL_nRF8001.cpp:14:

C:\Users\mika\Documents\Arduino\libraries\RBL_nRF8001\RBL_nRF8001.cpp:25:53: error: variable 'setup_msgs' must be const in order to be put into read-only section by means of 'attribute((progmem))'

static hal_aci_data_t setup_msgs[NB_SETUP_MESSAGES] PROGMEM = SETUP_MESSAGES_CONTENT;

^

Plusieurs bibliothèque trouvées pour "boards.h"
Utilisé : C:\Users\mika\Documents\Arduino\libraries\BLE_SDK_for_Arduino
Non utilisé : C:\Users\mika\Documents\Arduino\libraries\BLE
Non utilisé : C:\Users\mika\Documents\Arduino\libraries\BLE
Non utilisé : C:\Users\mika\Documents\Arduino\libraries\BLE
Non utilisé : C:\Users\mika\Documents\Arduino\libraries\BLE
Plusieurs bibliothèque trouvées pour "RBL_nRF8001.h"
Utilisé : C:\Users\mika\Documents\Arduino\libraries\RBL_nRF8001
Non utilisé : C:\Users\mika\Documents\Arduino\libraries\arduino_238006
exit status 1
Erreur de compilation pour la carte Blend Micro 3.3V/8MHz
Bibliothèque non valide trouvée dans C:\Users\mika\Documents\Arduino\libraries\BLE_API_arduino : C:\Users\mika\Documents\Arduino\libraries\BLE_API_arduino

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

OK il faut essayer de changer toutes les déclaration utilisant PROGMEM en les passant en const mais leur truc semble ne pas être maintenu, si j'étais vous j'investirai un peu dans des composants plus courants et maintenus

Je vais essayer.

C'est exactement ce que je me suis dit...une fois la carte reçue.

Merci pour le conseil , je vais lire le rapport d'erreur sous cet angle pour essayer de comprendre comment mettre moi-meme le truc à jour.