pengantar
Tujuannya adalah untuk mengedipkan LED pada GPIO dari SBC di proyek Qt Anda.
Hal pertama yang terlintas dalam pikiran adalah menggunakan solusi yang sudah jadi seperti wiringOP . Namun, bagi saya, sebagai programmer mikrokontroler, aneh memasang paket untuk bekerja dengan GPIO. Namun selain itu, paket pihak ketiga juga perlu ditautkan secara dinamis ke aplikasi saya. Dan kemudian pertanyaan tentang kompatibilitas dengan versi baru dari paket tersebut muncul, dan pertanyaan apakah paket ini akan diinstal pada sistem. Jadi, saya memutuskan untuk memasang wiringOP ke proyek Qt saya secara statis, dan juga dapat mengedit wiringOP sebagai proyek perpustakaan statis langsung di Qt Creator.
Ternyata, basis kode proyek wiringOP jelas berlebihan. Misalnya, saya tidak memerlukan kode apa pun untuk bekerja dengan register geser. Fungsi kuncinya adalah wiringPiSetup (), yang menanyakan Ubuntu untuk GPIO dan alamat register lainnya di memori dengan membaca file / dev / mem. Ke depan, saya akan mengatakan bahwa ini adalah lubang keamanan , karena dengan membaca / dev / mem, Anda tidak hanya dapat mengakses port I / O, tetapi juga seluruh RAM.
Setelah diinisialisasi dengan wiringPiSetup (), Anda siap untuk pergi. Jadi, fungsi pinMode mengatur mode operasi dari keluaran sisir: masukan, keluaran, pembangkitan PWM. Contoh kode berkedip oleh LED di 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++);
}
LED itu sendiri harus dihubungkan ke sisir. Dalam kasus Orange Pi 4B, situasinya adalah sebagai berikut.
Kabel penghubung statis
, . . , 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
Mari beralih ke proyek uji, dalam kasus saya konsol. Anda perlu menambahkan perpustakaan kami ke proyek sebagai Perpustakaan Eksternal sesuai dengan tangkapan layar.
Perhatikan bahwa file wiringPi.h yang sama digunakan saat membuat pustaka dan dalam program pengujian. Terakhir, Anda dapat menulis program untuk mengedipkan LED. Selanjutnya, mari transfer kode sumber ke mesin target.
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
Selanjutnya, mari buat pustaka dan contoh di mesin target. Itu berkedip padaku , dan padamu?