Computadora de placa única para programador integrado. Parpadeo del LED en Qt

Introducción

El objetivo es hacer parpadear el LED en el GPIO del SBC en su proyecto Qt.





Lo primero que me viene a la mente es utilizar una solución lista para usar como cableadoOP . Sin embargo, para mí, como programador de microcontroladores, es extraño instalar un paquete para trabajar con GPIO. Pero además de eso, el paquete de terceros también debe estar vinculado dinámicamente a mi aplicación. Y luego surge la cuestión de la compatibilidad con la nueva versión del paquete y la cuestión de si este paquete se instalará en el sistema. Por lo tanto, decidí adjuntar cableadoOP a mi proyecto Qt de forma estática y también poder editar cableadoOP como un proyecto de biblioteca estática directamente en Qt Creator.





Resulta que la base de código del proyecto de cableado OP es claramente redundante. Por ejemplo, no necesito ningún código para trabajar con registros de turnos. La función clave es cableadoPiSetup (), que solicita a Ubuntu el GPIO y otras direcciones de registro en la memoria leyendo el archivo / dev / mem. De cara al futuro, diré que este es un agujero de seguridad , porque al leer / dev / mem, puede acceder no solo a los puertos de E / S, sino también a toda la RAM.





Una vez inicializado con wirePiSetup (), estará listo para comenzar. Entonces, la función pinMode establece el modo de funcionamiento de la salida combinada: entrada, salida, generación de PWM. Un ejemplo de un código parpadeante por un LED en el 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++);
}
      
      



El LED en sí debe estar conectado al peine. En el caso de Orange Pi 4B, la situación es la siguiente.





Cableado de enlace estático 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





Pasemos a un proyecto de prueba, en mi caso uno de consola. Es necesario agregar nuestra biblioteca al proyecto como Biblioteca externa de acuerdo con la captura de pantalla.





Tenga en cuenta que se utiliza el mismo archivo wirePi.h tanto al crear la biblioteca como en el programa de prueba. Finalmente, puede escribir un programa para hacer parpadear el LED. A continuación, transfiramos los códigos fuente a la máquina de destino.





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
      
      



A continuación, creemos la biblioteca y el ejemplo en la máquina de destino. Parpadea a , ¿y a ti?








All Articles