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

C++ Discussion :

Tableau objets template<uint8_t>


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Etudiant Automatisme
    Inscrit en
    Mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant Automatisme
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Tableau objets template<uint8_t>
    Bonjour Ami.e.s codeur.euse,

    Je requière votre aide, cela fait presque une journée que je penche sur mon problème.

    Je travaille sur un microcontrôleur AVR 8bits Atmega328p (celui de l'arduino uno), la norme que j'utilise est C++11,

    donc le moindre byte de flash et SRAM sont précieux.

    Je développe mon propre framework, qui sera moins gourmand que celui proposé par Arduino.

    J'ai récemment découvre les templates, les constexpr et lors puissances.

    j'ai crée une template<uint8_t PIN_>

    qui permettent d'avoir en paramètre la pin sur laquelle la class va travailler.

    La passer en paramètre permet en autre de pré-calculer divers constantes lors de la compilation et non à l’exécution (il me semble que cela s'appelle la métaprogrammation).

    Ce-ci fonctionne très bien, et est super optimisé, j'adore.

    seulement voilà, j'aimerai avoir la possibilité d'avoir un tableau d'objets. et je bloque complètement sur comment faire.

    voici le code (j'ai supprimé ce qui n'avait rien avoir avec mon problème pour simplifier la compréhension).

    la class en question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template<uint8_t PIN_>
    class PWMPin
    {
    public: 
        void write(uint8_t duty);
     
        uint8_t getDuty() const;
     
       public:
        static constexpr uint8_t PIN = PIN_;
    	static constexpr uint8_t SHIFT_REGISTER = ((PIN_ & 0b00011000 >> 3) * 3);
    	static constexpr uint8_t BIT = (PIN_ & 0b00011000);
    };
    son implémentation dans le main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main()
    {
        PWMPin<10> motor1;
        PWMPin<9>  motor2;
     
        motor1.write(200);
        motor2.write(200);
     
        CSerial << "moteur1=" <<motor1.getDuty() << " moteur2=" << motor2.getDuty() << endl;
     
        return 0;
    }
    maintenant si je veux faire un tableau de moteurs (ou tout autre conteneur, premettant de manipuler plusieurs moteurs facilement), impossible de trouver une solution viable.

    j'ai essayée de faire une collection hétérogène avec une class conteneur maison, cependant, cela gaspille 2bytes de SRAM et presque 10bytes de flash par objet dans la collèction. dû coup cela perd de son intérêt de passer par une class template + constexpr.

    j'ai éssaye de faire des conversions de types, de passer par des pointeurs, (choses que je maitrise en vraiment maitriser ) etc... sans résultat.

    Ce que je n'arrive pas comprendre c'est pourquoi motor1 et motor2 son si différent alors que ce qui diffère que par une constante (de même type) passé par paramètre template.

    Je ne sais même pas s'il est possible de faire ce que je veux sans passer par une collection hétérogène.

    Donc voilà si quelqu'un peu m'aider à trouver une solution par avoir un tableau ou tout autre choses qui me permetterai de facilement manipuler plusieurs moteurs en mêmes temps du style.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int main()
    {
        //code pour déclarer mes moteurs sous forme de tableau 
     
     
        for(uint8_t i = 0; i < 5; i++)
        {
            motor[i].write(200);
            CSerial << "moteur[" << i <<"]=" <<motor[i].getDuty() << endl;
        }
     
        return 0;
    }
    Un grand merci à vous

    PS: je me suis auto-formé, donc il est possible que ce soit codé n'importe comment ou que le vocabulaire utilisé ne soit pas le bon. J'ai éssayé de faire de mon mieux.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Etudiant Automatisme
    Inscrit en
    Mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant Automatisme
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Résolu]
    Merci
    j'ai réussi à trouver mon bonheur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/08/2008, 03h30
  2. Débutant Salut pb de tableau Objet.
    Par JPC++ dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 17/02/2007, 23h27
  3. [tableau objet] impossible à remplir
    Par vasilov dans le forum C++
    Réponses: 6
    Dernier message: 23/03/2006, 14h26
  4. [POO] Tri tableau objets
    Par Metallic-84s dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2006, 19h53
  5. tableau objet
    Par harris_macken dans le forum C++
    Réponses: 9
    Dernier message: 20/06/2005, 21h04

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