Einführung
Ziel ist es, die LED am GPIO des SBC in Ihrem Qt-Projekt zu blinken.
Das erste, was mir in den Sinn kommt, ist die Verwendung einer vorgefertigten Lösung wie wiringOP . Für mich als Mikrocontroller-Programmierer ist es jedoch seltsam, ein Paket für die Arbeit mit GPIO zu installieren. Abgesehen davon muss das Paket eines Drittanbieters auch dynamisch mit meiner Anwendung verknüpft werden. Und dann stellt sich die Frage nach der Kompatibilität mit der neuen Version des Pakets und nach der Frage, ob dieses Paket auf dem System installiert wird. Daher habe ich mich entschlossen, wiringOP statisch an mein Qt-Projekt anzuhängen und wiringOP auch als statisches Bibliotheksprojekt direkt in Qt Creator bearbeiten zu können.
Wie sich herausstellt, ist die Codebasis des wiringOP-Projekts eindeutig redundant. Zum Beispiel brauche ich keinen Code, um mit Schieberegistern zu arbeiten. Die Schlüsselfunktion ist wiringPiSetup (), das Ubuntu durch Lesen der Datei / dev / mem nach dem GPIO und anderen Registeradressen im Speicher fragt. Mit Blick auf die Zukunft werde ich sagen, dass dies eine Sicherheitslücke ist , da Sie durch Lesen von / dev / mem nicht nur auf die E / A-Ports, sondern auch auf den gesamten RAM zugreifen können.
Nach der Initialisierung mit wiringPiSetup () können Sie loslegen. Die PinMode-Funktion legt also den Betriebsmodus des Kammausgangs fest: Eingang, Ausgang, PWM-Erzeugung. Ein Beispiel für einen blinkenden Code durch eine LED an Pin8.
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++);
}
Die LED selbst muss mit dem Kamm verbunden sein. Im Fall von Orange Pi 4B ist die Situation wie folgt.
Statische VerbindungsverdrahtungOP
, . . , 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
Fahren wir mit einem Testprojekt fort, in meinem Fall einem Konsolenprojekt. Es ist notwendig, unsere Bibliothek gemäß dem Screenshot als externe Bibliothek zum Projekt hinzuzufügen.
Beachten Sie, dass sowohl beim Erstellen der Bibliothek als auch im Testprogramm dieselbe wiringPi.h-Datei verwendet wird. Schließlich können Sie ein Programm schreiben, um die LED zu blinken. Als nächstes übertragen wir die Quellcodes auf den Zielcomputer.
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
Als Nächstes erstellen wir die Bibliothek und das Beispiel auf dem Zielcomputer. Es blinzelt mich an und dich an?