前書き
目標は、QtプロジェクトのSBCのGPIOのLEDを点滅させることです。
最初に頭に浮かぶのは、wiringOPなどの既製のソリューションを使用することです。しかし、私にとって、マイクロコントローラープログラマーとして、GPIOで動作するパッケージをインストールするのは奇妙です。ただし、それに加えて、サードパーティのパッケージもアプリケーションに動的にリンクする必要があります。次に、新しいバージョンのパッケージとの互換性の問題が発生し、このパッケージがシステムにインストールされるかどうかの問題が発生します。そのため、wiringOPをQtプロジェクトに静的にアタッチし、wiringOPを静的ライブラリプロジェクトとしてQtCreatorで直接編集できるようにすることにしました。
結局のところ、wiringOPプロジェクトのコードベースは明らかに冗長です。たとえば、シフトレジスタを操作するためのコードは必要ありません。重要な機能はwiringPiSetup()で、/ dev / memファイルを読み取ることにより、Ubuntuにメモリ内のGPIOおよびその他のレジスタアドレスを要求します。将来的には、これはセキュリティホールであると言えます。これは、 / dev / memを読み取ることで、I / Oポートだけでなく、RAM全体にもアクセスできるためです。
WireingPiSetup()で初期化すると、準備が整います。したがって、pinMode関数は、コーム出力の動作モード(入力、出力、PWM生成)を設定します。ピン8のLEDによる点滅コードの例。
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自体をコームに接続する必要があります。場合、以下のようにオレンジパイ4B、状況があります。
静的リンク配線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
テストプロジェクト、私の場合はコンソールプロジェクトに移りましょう。スクリーンショットに従って、ライブラリを外部ライブラリとしてプロジェクトに追加する必要があります。
ライブラリの作成時とテストプログラムの両方で同じwiringPi.hファイルが使用されることに注意してください。最後に、LEDを点滅させるプログラムを書くことができます。次に、ソースコードをターゲットマシンに転送しましょう。
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
次に、ターゲットマシンでライブラリと例を作成しましょう。それは私に、そしてあなたに点滅しますか?