Ordinateur monocarte pour programmeur embarqué. Clignotement de la LED sur Qt

introduction

Le but est de faire clignoter la LED sur le GPIO du SBC dans votre projet Qt.





La première chose qui me vient à l'esprit est d'utiliser une solution toute faite comme le câblageOP . Cependant, pour moi, en tant que programmeur de microcontrôleur, il est étrange d'installer un package pour travailler avec GPIO. Mais en plus de cela, le package tiers doit également être lié dynamiquement à mon application. Et puis la question de la compatibilité avec la nouvelle version du package se pose, et la question de savoir si ce package sera installé sur le système. Ainsi, j'ai décidé d'attacher de manière statique CâblageOP à mon projet Qt, et de pouvoir également éditer CâblageOP en tant que projet de bibliothèque statique directement dans Qt Creator.





Il s'avère que la base de code du projet de câblageOP est clairement redondante. Par exemple, je n'ai besoin d'aucun code pour travailler avec des registres à décalage. La fonction clé est câblagePiSetup (), qui demande à Ubuntu le GPIO et d'autres adresses de registre en mémoire en lisant le fichier / dev / mem. Pour l'avenir, je dirai qu'il s'agit d' une faille de sécurité , car en lisant / dev / mem, vous pouvez accéder non seulement aux ports d'E / S, mais également à toute la RAM.





Une fois initialisé avec câblagePiSetup (), vous êtes prêt à partir. Ainsi, la fonction pinMode définit le mode de fonctionnement de la sortie du peigne: entrée, sortie, génération PWM. Un exemple de code clignotant par une LED sur la broche 8.





wiringPiSetup();
pinMode(3, OUTPUT);
while(1){
  digitalWrite(3, LOW);
  delay(1000); //for(volatile uint64_t i=0;i<0xFFF;i++);
  digitalWrite(3, HIGH);
  delay(1000); //for(volatile uint64_t i=0;i<0xFFF;i++);
}
      
      



La LED elle-même doit être connectée au peigne. Dans le cas de l' Orange Pi 4B, la situation est la suivante.





Câblage de liaison statique OP

, . . , wiringOP





git clone https://github.com/orangepi-xunlong/wiringOP.git 
      
      



Statically Linked Library. qmake.





wiringOP .





.pro , . -, SBC. -, , libmy_wiringOP_v5.a wiringOP_build_artifacts.





DEFINES += CONFIG_ORANGEPI 
DEFINES += CONFIG_ORANGEPI_4  
DESTDIR = $$PWD/../wiringOP_build_artifacts
      
      



. ; $$PWD .





. libmy_wiringOP_v5.a





Passons à un projet de test, dans mon cas un projet console. Il est nécessaire d'ajouter notre bibliothèque au projet en tant que bibliothèque externe selon la capture d'écran.





Notez que le même fichier WiringPi.h est utilisé à la fois lors de la création de la bibliothèque et dans le programme de test. Enfin, vous pouvez écrire un programme pour faire clignoter la LED. Ensuite, transférons les codes sources vers la machine cible.





rsync -avz /home/andrei//mywiringOP/my_wiringOP_base/my_wiringOP_v5  a@192.168.0.112:/home/a/Documents/QtProj
rsync -avz /home/andrei//mywiringOP/my_wiringOP_base/wOP_Test1  a@192.168.0.112:/home/a/Documents/QtProj
      
      



Ensuite, construisons la bibliothèque et l'exemple sur la machine cible. Ça cligne des yeux vers moi , et vers toi?








All Articles