IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Apprentissage sur MCU st microelectronics


Sujet :

Embarqué

  1. #1
    Membre très actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Août 2008
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2008
    Messages : 376
    Par défaut Apprentissage sur MCU st microelectronics
    Bonjour, étant familiarisé depuis quelques années de l'environnement de développement chez Microchip avec MPLABx, j'ai décidé de passer chez STMicroelectronics en travaillant sur le STM32G431RB sur la carte d'essais NUCLEO-G431RB.

    Pour m'orienter quelque peut sur l'apprentissage de l'environnement j'utilise l'IA qui me permet de gagner pas mal de temps sans pour autant faire du copier coller sans tout vérifier car tout n'est pas correct pour le moment.

    Et dans mes habitudes de prog, j'utilise un fichier Variable_global.h que je déclare dans tous les autres fichiers comme tel :

    #include "Variable_global.h" or l'IA me recommande de créer 2 fichiers, Variable_global.h et Variable_global.c que je rempli pour une variable globale comme ceci

    Dans Variable_global.h extern uint32_t interval_led; puis
    Dans Variable_global.c uint32_t interval_led = 100;

    J'ai donc l'impression de déclarer 2 fois interval_led et surtout ça m'oblige à travailler sur deux emplacements pour déposer une variable ce qui globalement peut ce faire mais peut-être source d'erreur à la long ...

    De mémoire, sur d'autres environnement, je n'avais juste à aller qu'à un seul emplcement, le fichier .h

    y a certainement une notion qui m'échappe mais selon vous, comment puis architecturé mon soft pour ceci ?
    Merci pour votre intérêt et votre temps

    Bonne journée

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 245
    Par défaut
    Bonjour,
    Citation Envoyé par davidif Voir le message
    or l'IA me recommande de créer 2 fichiers, Variable_global.h et Variable_global.c
    Je ne vois pas ce qui t'oblige a respecter cette recommandation. Je connais d'autre environnement où tu as des fichiers .h qui n'ont pas de .c associé.

    Peut-être que tu peux demander à ton IA pourquoi elle recommande de faire ça ? C'est peut-être pour le contrôle de la portée des variables.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Membre très actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Août 2008
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2008
    Messages : 376
    Par défaut
    Bonjour Vincent Petit, voici ce que me retourne l'IA
    Nom : IA.png
Affichages : 37
Taille : 61,2 Ko

    Peut-être y a t-il une subtilité qui m'échappe car dans mes précédant soft, je plaçais bien toutes mes variables dans un fichier .h qui était déclaré dans tous mes autres fichiers ...

    Suivant recommandation de l'IA :

    Je fais donc dans Project_global.h extern uint32_t interval_led;
    et dans Project_global.c uint32_t interval_led = 100;

    Et dans les fichiers utilisant ma variable, exemple le main.c en tête

    #include "Project_Globals.h"

    et quand j'enlève la déclaration du ficher Projet_global.c j'ai donc une erreur de compilation me disant que dans le main, la fameuse variable n'est pas déclaré

    /main.c:193.text.main+0xbc): undefined reference to `interval_led'

    Ayant toujours dans Project_global.h extern uint32_t interval_led;

    Aussi lorsque j'enlève le "extern " j'ai cette erreur : Project_Globals.h:22: multiple definition of `interval_led'; et Project_globals.h:22: first defined here

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 279
    Par défaut
    La dernière erreur est celle qui correspond à l'oubli de #ifndef xyz #define xyz, etc... dans le .h

    Le extern indique au compilateur que la variable arrivera plus tard (sera renseignée lors de l'étape de link), et qu'il peut continuer la première passe de compilation (celle qui fait fichier par fichier) même sans savoir où est cette variable.

    Avec mes connaissances, certes limitées, je ne vois pas de différence au final entre les deux solutions. Et je préfère largement la solution de la déclaration dans le .h
    Il n'y a également pas de différence de portée entre les deux méthodes, puisque la variable est disponible pour tout les fichiers .c qui incluent le .h dans les deux cas.

    Delias

  5. #5
    Membre très actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Août 2008
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2008
    Messages : 376
    Par défaut
    dans le .h j'ai bien en entête

    #ifndef __PROJECT_GLOBALS_H
    #define __PROJECT_GLOBALS_H

    en l'occurrence, ce que j'ai en plus pour d'autre .h natif et pas mis dans Projet_global.h

    #ifdef __cplusplus
    extern "C" {
    #endif

    Mais je sais pas trop ce que ça fait ?... voir en le rajoutant ...

  6. #6
    Membre très actif
    Homme Profil pro
    Electronicien
    Inscrit en
    Août 2008
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Electronicien
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2008
    Messages : 376
    Par défaut
    Bonjour, quelqu'un pourrait m'éclairer sur le mode à tenir pour utiliser un seul endroit pour déclarer mes variable avec l'IDE stm32 ou STM32CubeeIDE.

    Merci
    Bonne journée

  7. #7
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 124
    Billets dans le blog
    47
    Par défaut
    Bonjour,

    C'est tout de même une bonne pratique de séparer les déclarations de variables globales et leur initialisation. Si un deuxième source .c inclut ce .h avec l'initialisation de la variable, tu risques une erreur pour avoir redéfini la variable globale.

    Tu peux aussi t'en sortir comme ça :

    Projet_global.h
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Projet_global.h
    #ifndef __PROJECT_GLOBALS_H
    #define __PROJECT_GLOBALS_H
     
    #define INTERVAL_LED (100)
     
    extern uint32_t interval_led;
     
    #endif

    Projet.c
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "Projet_global.h"
     
    uint32_t interval_led = INTERVAL_LED;

    Et tu peux modifier la valeur d'initialisation en n'éditant que le fichier.h.

Discussions similaires

  1. [Python 3.X] [Python] Aide apprentissage sur quelque énoncé de programme
    Par sxm150 dans le forum Général Python
    Réponses: 3
    Dernier message: 20/04/2021, 15h09
  2. Conseil d'apprentissage sur le langage JAVA
    Par javenchi dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 28/04/2016, 14h49
  3. Protocole SD embarqué sur MCU
    Par pegase.90 dans le forum C
    Réponses: 3
    Dernier message: 04/10/2011, 20h29
  4. [Professionnalisation/Alternance] A la recherche d'un apprentissage sur Toulouse
    Par jean1190 dans le forum Demandes
    Réponses: 0
    Dernier message: 10/07/2010, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo