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 :

Variable pointant sur un registre hardware !


Sujet :

C

  1. #21
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    J'aimerai savoir comment Mr. Mike McCauley a fait pour créer sa bibliothèque BCM2835.h ?
    Je redonne le lien vers son site qui détail toutes les fonctions utilisées.
    Je donne aussi le lien vers le GitHub qui contient ls utilitaire pour créer la bibliothèque BCM2835.
    En particulier, le lien vers ce qui m'intéresse, à savoir la section "src".

    Même en mettant mon nez dans ce GitHub, je n'ai toujours pas compris comment il a fait pour créer cette bibliothèque que j'ai installé depuis fort longtemps dans ma raspberry pi.

    En tout cas, Mr. Mike Mc Cauley a fait un magnifique travail !!! Bravo.

    @+
    Salut,

    Tout est dans la function bcm2835_init(), implémentée dans le fichier bcm2835.c, à partir de la ligne 1150, l'auteur fait des mappages de /dev/mem avec la function mmap().

  2. #22
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut Kaitlyn.

    Citation Envoyé par Chrtophe
    Et là maintenant tu parles d'utiliser une bibliothèque.
    Je mets en rouge ce que tu as mal lu. Le message dont tu parles est le suivant :

    Citation Envoyé par Artemus24
    Mon problème est que j'aimerai accéder aux registres des GPIO afin de créer un programme en 'C' sans passer par des bibliothèques.
    Franchement, je dois mal m'exprimer.

    Citation Envoyé par Chrtophe
    Et qu'appeles-tu programmation bare metal ?
    Bare metal signifie en anglais "métal nu". Ca signifie sans utiliser un OS.
    C'est la même chose quand tu utilises un microcontrôleur arduino, où tu installes ton sketch après l'avoir compilé sur une autre plate-forme.
    Disons qu'au lieu d'utiliser un microcontrôleur comme l'arduino, j'utilise mes RPi zero.

    Citation Envoyé par Chrtophe
    parce que pour moi, le bare metal c'est lié à la virtualisation.
    Pour des serveurs oui, comme dans le cas des clouds.
    Sauf que je ne suis pas dans ce cas, car j'utilise des IOT, où je préfère tout développer par moi-même.
    Autrement dit, je démarre à nu sur ma carte, comme la RPi zero, l'ESP8266, l'ESP32, ...

    Citation Envoyé par Chrtophe
    Ah bon, et pourquoi ? plus exploitable sur les derniers RaspBerry ?
    Je n'en sais rien, mais c'est ce qui est dit. Tu peux continuer à les utiliser.
    Je pense que ce sont les accès par des open ... close qui sont devenus obsolètes à cause de leur lenteur.

    Il n'existait pas de bibliothèques pour accéder proprement aux registres.
    Depuis 2018, tu peux passer par la libgpiod, qui est la "linux/gpio.h", sauf qu'elle concerne que les GPIO, pas les autres registres.

    Citation Envoyé par Chrtophe
    En regardant vite fait sur le net, j'ai vu qu'il existait /dev/gpiomem, le principe semblant le même
    "/dev/gpiomem" et "/dev/gpiochip" concernent la nouvelle bibliothèque libgpiod.

    Citation Envoyé par Chrtophe
    En regardant la doc officielle, ils recommandent l'utilisation de libgpiod,
    C'est ce que j'ai dit précédemment. Cette nouvelle bibliothèque est arrivé en 2018.
    Libgpiod est en fait la bibliothèque qui se nomme "/linux/gpio.h".

    Franchement, c'est le bazar car chacun y va de ses bibliothèques et du coup, on s'y perd entre la bonne façon de faire et la pérénité.
    Je n'utilise pour l'instant que la bibliothèque de Mr Mike Mc Cauley, que pour accéder aux GPIO.
    Pour les accès aux autres registres, je passe par la fonction "ioctl()", comme en i2c et spi.

    Citation Envoyé par Chrtophe
    on peut voir que sysFS est pas mal utilisé, donc pas si obsolète que ça.
    --> https://www.kernel.org/doc/Documentation/gpio/sysfs.txt

    Cela ne va pas être supprimé du jour au lendemain, il y a des tas de développements qui reposent sur ces techniques.
    Elles ne vont plus évoluer et c'est tout, mais tu pourras quand même les utiliser.

    Citation Envoyé par kaitlyn
    Tout est dans la function bcm2835_init(), implémentée dans le fichier bcm2835.c, à partir de la ligne 1150, l'auteur fait des mappages de /dev/mem avec la function mmap().
    J'aurai dû me douter que c'est la technique devmem qui a été utilisé car cette bibliothèque a été créé en 2012, bien avant l'apparition de libgpiod.

    Je croyais, comme pour le bare metal, utiliser un autre compilateur qui m'aurait autorisé les accès aux registres.
    Je suis déçu car je croyais trouver une autre technique que celle que je connaissais déjà (devmem).
    C'est même par celle-ci que j'ai commencé à m'intéresser aux GPIO.

    Je pense que le sujet est clos, sauf si vous avez d'autres commentaires à me fournir.

    Merci à Kaitlyn pour m'avoir ouvert les yeux sur ce que je ne voyais pas dans la bibliothèque "BCM2835".
    Merci à tous les autres pour leur participation et surtout leur patience sur ce sujet technique.

    P.S.: je n'ai mis que des +1.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #23
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 446
    Points : 43 090
    Points
    43 090
    Par défaut
    Si besoin, tu peux aussi aller faire un tour dans le forum RaspBerry.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #24
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Je pense que le sujet est clos, sauf si vous avez d'autres commentaires à me fournir.
    Schématiquement, sur le plan conceptuel, la différence entre les libs bcm2835 et libgpio n'est pas si énorme que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    utilisateur / interface / noyau       -> registres
    ---------------------------------------------------
    bcm2535     / devmem    / kernel      -> registres
    libgpio     / ioctl     / gpiodriver  -> registres
    Donc si le problème est du côté du pull-up, etc, et c'est là que la lib bcm2835 est très intéressante, on y ressent un bel effort de documentation en amont, il y a la fonction bcm2835_gpio_pud() qui montre comment faire, et que tu peux transposer sur libgpio.
    Si le problème avec devmem c'est l'instabilité du système, tu peux faire un double mappage, tu modélises tes registres rpi dans une struct(ure) que tu mappes avec devmem, ça évitera d'écrire des choses là où il ne faut pas.

  5. #25
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut à tous.

    Citation Envoyé par Chrtophe
    Si besoin, tu peux aussi aller faire un tour dans le forum RaspBerry.
    En ce moment, il n'y a pas beaucoup d'activités dans ce forum.
    Ce sont surtout des débutants qui viennent poser leurs questions.
    Je ne crois pas que j'aurai eu une réponse adéquate, vu que la question était technique.

    Citation Envoyé par Kaitlyn
    Si le problème avec devmem c'est l'instabilité du système
    Je n'ai pas de problèmes avec devmem.
    C'est juste que je ne savais pas comment accéder aux registres.

    Je n'ai pas constaté d'instabilité dans la gestion des registres.
    Il y a juste une gestion particulière des adresses de bases puisqu'elles dépendent du type de raspberry que tu utilises.

    Citation Envoyé par Kaitlyn
    tu modélises tes registres rpi dans une struct(ure) que tu mappes avec devmem, ça évitera d'écrire des choses là où il ne faut pas.
    C'est l'idée première que j'avais, à savoir créer une structure, puisque dans le cas des GPIO, il y a 41 registres contigües.
    Mais l'accès à certains registres se font par un simple calcul où la partie entière est le offset et la partie décimal, la valeur à mettre dans le registre.

    Pour d'autres, en effet, la structure sera très utile.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/08/2017, 21h46
  2. Variable pointant sur une partie du tableau
    Par huître dans le forum C
    Réponses: 6
    Dernier message: 17/04/2015, 16h48
  3. [Free Pascal] [Débutant] Variable pointant sur partie variable d'enregistrement
    Par thierrybo dans le forum Free Pascal
    Réponses: 4
    Dernier message: 02/10/2009, 22h08
  4. Variable pointant sur un objet fermé
    Par azur668 dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/08/2009, 12h27
  5. Transtyper element d'1 variable pointant sur TList?
    Par Cornell dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2003, 22h53

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