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ê?