Computador de placa única para programador integrado. Piscando o LED no Qt

Introdução

O objetivo é piscar o LED no GPIO do SBC em seu projeto Qt.





A primeira coisa que vem à mente é usar uma solução pronta como wiringOP . Porém, para mim, como programador de microcontroladores, é estranho instalar um pacote que funcione com GPIO. Mas, além disso, o pacote de terceiros também precisa ser vinculado dinamicamente ao meu aplicativo. E então surge a questão de compatibilidade com a nova versão do pacote, e a questão de se este pacote será instalado no sistema. Portanto, decidi anexar o wiringOP ao meu projeto Qt estaticamente, e também ser capaz de editar o wiringOP como um projeto de biblioteca estática diretamente no Qt Creator.





Acontece que a base de código do projeto wiringOP é claramente redundante. Por exemplo, não preciso de nenhum código para trabalhar com registradores de deslocamento. A função principal é wiringPiSetup (), que pede ao Ubuntu o GPIO e outros endereços de registro na memória lendo o arquivo / dev / mem. Olhando para o futuro, direi que esta é uma falha de segurança , porque lendo / dev / mem, você pode acessar não apenas as portas de E / S, mas também toda a RAM.





Depois de inicializado com wiringPiSetup (), você está pronto para começar. Assim, a função pinMode define o modo de operação da saída comb: entrada, saída, geração PWM. Um exemplo de um código piscando por um LED no pino 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++);
}
      
      



O próprio LED deve ser conectado ao pente. No caso de Orange Pi 4B, a situação é a seguinte.





Fiação de ligação estática 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





Vamos passar para um projeto de teste, no meu caso, um console. É necessário adicionar nossa biblioteca ao projeto como Biblioteca Externa de acordo com a imagem.





Observe que o mesmo arquivo wiringPi.h é usado ao criar a biblioteca e no programa de teste. Finalmente, você pode escrever um programa para piscar o LED. A seguir, vamos transferir os códigos-fonte para a 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 seguir, vamos construir a biblioteca e o exemplo na máquina de destino. Ele pisca para mim e para você?








All Articles