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

Raspberry Pi Discussion :

Gérer les GPIO en assembleur, en passant par les registres


Sujet :

Raspberry Pi

  1. #1
    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 379
    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 379
    Points : 19 060
    Points
    19 060
    Par défaut Gérer les GPIO en assembleur, en passant par les registres
    Salut à tous.

    On peut gérer les GPIO de la raspberry à partir des registres.
    J'ai fait ce genre de tests, en assembleur ARM, à partir d'un RPI zéro en faisant du BARE METAL.
    J'ai trouvé cela fort intéressant, mais j'aurai aimé le faire sous Raspbian, en tant que sous programme.
    Mais voilà, j'ignore quel outil (pour l'assemblage) me permet de réaliser cet utilitaire.

    Si vous savez comment faire, je suis preneur de toutes vos recommandations.

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

  2. #2
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Bonjour.
    Vous pouvez toujours utiliser as et ld pour gérer le GPIO directement à partir des registres. Voir un exemple sur le blog :
    http://assembleurarmpi.blogspot.com/p/blog-page.html au chapitre 18.

  3. #3
    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 379
    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 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut Vincent.

    Je sais gérer les GPIO et autres périphériques en assembleur seul ou en combinant l'assembleur et le 'C' dans le cas du Bare-Metal.
    C'est-à-dire un programme que j'ai créé et placé sur une carte micro SD, que je vais charger directement dans ma Raspberry Pi zero W.

    Sauf que je ne veux pas procéder ainsi, mais le faire en tant que programme (ou plutôt une bibliothèque) dans le système d'exploitation RaspBian.
    Pour être plus précis, je ne veux pas, non plus, passer par les périphériques "/dev/gpiomem" ou quoi que ce soit d'autre qui est accessible dans l'OS.
    Comme en Bare-Metal, j'aimerai accéder directement aux registres de la raspberry pi.
    Or en faisant cela, je me retrouve avec un "fault segmentation".
    J'accède à de la mémoire dont je ne suis pas autorisé à le faire.

    J'ai déjà jeté un coup d'œil à ton programme, mais ce n'est pas ainsi que je veux procéder.
    Par cette méthode, je ne peux pas accéder au Pull-Up et Pull-Down et encore moins aux événements.

    Mrci quand même de ta participation.

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

  4. #4
    Modérateur

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

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 830
    Points
    4 830
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Sauf que je ne veux pas procéder ainsi, mais le faire en tant que programme (ou plutôt une bibliothèque) dans le système d'exploitation RaspBian.
    Je ne suis pas un spécialiste du Pi, mais sur PC ce n'est plus possible depuis Win XP.
    Et de manière générale l'accès aux registres en direct n'est autorisé que pour l'OS. Il s'agit de protéger contre les accès parallèles qui peuvent dans le pire des cas casser le microprocesseur. Le seg fault correspond à cela.

    Il faut soit développer un driver, soit utiliser un driver particulier, un peu bateau, qui offre l'accès aux registres (c'était la solution à l'arrivée de XP, j'ai perdu les références depuis).

    Réponse de principe, je ne connais pas le Pi pour aller plus en détail.

    Bonne suite

    Delias

  5. #5
    Membre régulier
    Homme Profil pro
    retraité
    Inscrit en
    Avril 2019
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Avril 2019
    Messages : 49
    Points : 70
    Points
    70
    Par défaut
    Bonsoir.
    Ah, maintenant je vois bien ce que tu veux faire. Il faut écrire un driver sous la forme d'un module. Je l'ai fait une fois et j'arrive plus à retrouver le truc.
    Mais il y a des tutos qui expliquent cela sur Internet dont un ici :
    https://broux.developpez.com/articles/c/driver-c-linux/
    ou celui ci en anglais :
    https://www.opensourceforu.com/2014/...-linux-kernel/

    Un des problèmes de cette façon de faire est qu'il faut installer tous les paquets source du noyau Linux et recompiler ton module à chaque nouvelle version du noyau (mais il n'est pas nécessaire de recompiler tout le noyau !!)

    Bon courage !!

  6. #6
    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 379
    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 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut à tous.

    @ Delias : C'est bien avec la Raspberry Pi que je désire faire cela.
    Aucun intérêt de le faire avec windows car je ne me sers pas de mon PC pour faire de la programmation système.

    Il s'agit de protéger contre les accès parallèles qui peuvent dans le pire des cas casser le microprocesseur.
    La bibliothèque WiringPi n'est plus maintenue. Décision de son créateur !
    Je ne vais pas éternellement resté dans la raspberry Pi 3B+ puisque c'est cette version qui est la dernière.

    Et puis si je casse ma raspberry pi 3B+, elle ne vaut que 42,90€ chez Kubii. C'est pas dramatique.

    Un driver, ce n'est pas le terme que j'aurai utilisé, mais plutôt une bibliothèque de fonctions.
    J'ai déjà créé un driver pour mon afficheur LCD. L'accès aux registres n'est pas protégé.
    Dans le cas de la raspberry PI, c'est une question d'autorisation, enfin je crois.
    A moins qu'il y a une astuce pour y accéder.
    J'ai trouvé le lien vers la bibilothèque BCM2835.
    Je vais me pencher sur cette question.

    @ vincent Boulou : non ce n'est pas un module que je dois inclure dans le noyau linux.

    Il y a peu d'exemples de ce que je recherche sur le net. Je vais poursuivre mes investigations.

    @+
    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.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/10/2007, 09h53
  2. Gérer les services W32 par programme
    Par Gugli dans le forum Delphi
    Réponses: 1
    Dernier message: 15/06/2007, 22h45
  3. Gérer les évènements VBA par programmation
    Par gbuxo dans le forum VBA Access
    Réponses: 14
    Dernier message: 09/05/2006, 11h13
  4. Rendre invisible les valeurs passant par l'URL
    Par Jones dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/11/2004, 11h50
  5. Copies de flots en passant par les itérateurs
    Par Christophe Brun dans le forum C++
    Réponses: 7
    Dernier message: 02/07/2003, 11h41

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