RTThread IOコンポーネントGPIO
1861 ワード
本文は主にGPIOの実現を理解する drv_gpio.cファイルの大まかな分析 drv_gpio.cファイルの大まかな分析
menuconfigグラフィック構成では、components->Device Drivers->using generic GPIO device driversにオンが表示されます.このファイルは、一般的なGPIO構成にかかわらず、周辺機器の多重構成を含まない.まずpin[]の声明を見て、ここでIO口を抽象的に番号にします.私たちが使っているのはこの数字で、iicコンポーネントを使うと2つのピンの番号を入力する必要があります.この番号はこの数字を指して、GET_を使うことができます.PIN(H,10)はピン番号を素早く取得する.
マッピングテーブルを中断するのは何も言うことはありません.続けてみるとstm 32の一連が見つかりますpin_xxx関数これらのpin関数は
個人的にはここを組み合わせてopsインタフェースを使います.裸機から来た私は以前void xxxxを書くと予想していました.band(device_t x, void (*punc)(…));このような形態では、この方法と比較して、チップを交換して直接対応する下地を変更すればよい.しかも全部constです.RAMを占有しない.この方法はRTThreadでよく見られる構造である.では、上が下で、下が抽象的なものであることを理解する必要があります.呼び出しを明らかにするにはopsを直接素早く調べ、注目に値しないものを省略することができます.
対応する自筆モジュールも抽象化できます.例えば私は足を1つ作って、関節を2つ持っています.各ジョイントにモーターとセンサーを1つずつつけます.では、足のモジュールを独立してコンパイルするには、関節のapiを抽象的に制御し、関節は足の抽象を完成しなければならないと同時に、モータとセンサのapiを抽象的に制御しなければならない.モーターはいろいろありますが、foc、ステッピングなど、センサーはもっとあります.これらの部分は同様にシャットダウンの抽象化を完了し,また対応する共通点を統合して抽象化を継続する.モータとセンサの下層が実際のモータとセンサに対応している場合は,RTThreadのこのような書き方を参考にして達成できる.
これで次々と分割されたが、それでも問題は多い.例えば、インタフェースがどのように設計されているか、最も簡単なインタフェースに基づいて設計されているのか、それとも全面的に設計されているのか.どのように戦略モデルを実現するか、結局モジュール化設計は戦略モデルを実現できないのがもったいない.例えば、ネットワークは有線ネットワークを使用することができ、wefiを使用することができる.特定のアプリケーション・レイヤは、新しいインスタンスを再作成するのではなく、スイッチング・プロトコル・スタックを実行するだけで目的を達成します.
ファイルrt_を見続けますdevice_pin_registerはopsを登録しました.そしてこの関数を見ると、多くのインタフェースが割り当てられたRT_NULL、ここでは直接インタフェースだと思って合理的に実現しなければならないが、今から見れば汎用化されず、使わないものは直接空にすることができる.例えばセンサの私たちはinitとreadインタフェースだけを設計することができます.これは迅速な開発に便利です.
あとは中関係のものです.各割り込みでrt_が呼び出されましたinterrupt_enterとrt_interrupt_leave.
今回はRTThreadのdrvを大まかに把握しましたgpioの作成方法といくつかの設計規則.次に、いくつかのファイルを分析して、頼りになるかどうかを見てみましょう.
menuconfigグラフィック構成では、components->Device Drivers->using generic GPIO device driversにオンが表示されます.このファイルは、一般的なGPIO構成にかかわらず、周辺機器の多重構成を含まない.まずpin[]の声明を見て、ここでIO口を抽象的に番号にします.私たちが使っているのはこの数字で、iicコンポーネントを使うと2つのピンの番号を入力する必要があります.この番号はこの数字を指して、GET_を使うことができます.PIN(H,10)はピン番号を素早く取得する.
マッピングテーブルを中断するのは何も言うことはありません.続けてみるとstm 32の一連が見つかりますpin_xxx関数これらのpin関数は
const static struct rt_pin_ops _stm32_pin_ops =
{
stm32_pin_mode,
stm32_pin_write,
stm32_pin_read,
stm32_pin_attach_irq,
stm32_pin_dettach_irq,
stm32_pin_irq_enable,
}
個人的にはここを組み合わせてopsインタフェースを使います.裸機から来た私は以前void xxxxを書くと予想していました.band(device_t x, void (*punc)(…));このような形態では、この方法と比較して、チップを交換して直接対応する下地を変更すればよい.しかも全部constです.RAMを占有しない.この方法はRTThreadでよく見られる構造である.では、上が下で、下が抽象的なものであることを理解する必要があります.呼び出しを明らかにするにはopsを直接素早く調べ、注目に値しないものを省略することができます.
対応する自筆モジュールも抽象化できます.例えば私は足を1つ作って、関節を2つ持っています.各ジョイントにモーターとセンサーを1つずつつけます.では、足のモジュールを独立してコンパイルするには、関節のapiを抽象的に制御し、関節は足の抽象を完成しなければならないと同時に、モータとセンサのapiを抽象的に制御しなければならない.モーターはいろいろありますが、foc、ステッピングなど、センサーはもっとあります.これらの部分は同様にシャットダウンの抽象化を完了し,また対応する共通点を統合して抽象化を継続する.モータとセンサの下層が実際のモータとセンサに対応している場合は,RTThreadのこのような書き方を参考にして達成できる.
これで次々と分割されたが、それでも問題は多い.例えば、インタフェースがどのように設計されているか、最も簡単なインタフェースに基づいて設計されているのか、それとも全面的に設計されているのか.どのように戦略モデルを実現するか、結局モジュール化設計は戦略モデルを実現できないのがもったいない.例えば、ネットワークは有線ネットワークを使用することができ、wefiを使用することができる.特定のアプリケーション・レイヤは、新しいインスタンスを再作成するのではなく、スイッチング・プロトコル・スタックを実行するだけで目的を達成します.
ファイルrt_を見続けますdevice_pin_registerはopsを登録しました.そしてこの関数を見ると、多くのインタフェースが割り当てられたRT_NULL、ここでは直接インタフェースだと思って合理的に実現しなければならないが、今から見れば汎用化されず、使わないものは直接空にすることができる.例えばセンサの私たちはinitとreadインタフェースだけを設計することができます.これは迅速な開発に便利です.
あとは中関係のものです.各割り込みでrt_が呼び出されましたinterrupt_enterとrt_interrupt_leave.
今回はRTThreadのdrvを大まかに把握しましたgpioの作成方法といくつかの設計規則.次に、いくつかのファイルを分析して、頼りになるかどうかを見てみましょう.