低レベルのドライバー作成の基本ルール

1ハードウェアオブジェクトごとに独立したドライバーを作成します

各オブジェクトはヘッダーファイルとソースファイルに対応します。オブジェクトが外部オブジェクトの場合、マクロをヘッダーファイルで使用して、オブジェクトが接続されているピンを定義する必要があります。ヘッダーファイルは、外部呼び出しの関数関数のみを宣言します。つまり、他の人は、コードを読むためにソースファイルを見る必要なしに、このオブジェクトの使用方法を知るためにヘッダーファイル関数宣言を見るだけで済みます。一般的な関数の命名規則は次のとおりです。Chargerの初期化などのオブジェクト関数。関数名はChargerInitにすることができます。
関数がオブジェクトの関数によって内部的にのみ呼び出される場合、静的として宣言された関数は静的関数としてのみ使用できるため、関数はヘッダーファイルではなくソースファイルで宣言および実装され、静的関数として宣言されます。関数Useを定義するソースファイル。他のソースファイルはこの関数を認識できません。グローバル変数が特定のモジュールによってのみ使用される場合、このグローバル変数を静的として定義できます。これにより、この変数は定義されているソースファイルでのみ使用でき、他のソースファイルはこの変数を認識できなくなります。名前の競合はありません。

2パッケージは完全である必要があり、パッケージ間で交差することはできません

モジュール関数は、このモジュールによって実現される関数を実現します。モジュールは相互に呼び出すことはできません。呼び出す場合は、ハイエンドによって処理されます。たとえば、フラッシュサブルーチンでシリアルポートを呼び出すことはできません。もちろん、Flashサブルーチンをテストする場合は例外です。終了したら、シリアルポートサブルーチンを呼び出すためのコードを削除する必要があります。このとき、Flashサブルーチンは戻り値を介してハイエンドに通知できるため、High -endは、戻り値に従ってシリアルサブルーチンを呼び出すかどうかを決定します。

3戻り値の問題

基本的なタイプの戻り値のみを返す場合は、戻り値を使用してこの値を返すことができます。構造体構造などの複雑なタイプの戻り値を返す場合は、戻り値が返されるかどうかをコピーする必要があります。アドレスで返す場合、戻り値が多い場合、これらの値を構造体で定義し、ポインターの形式で返すことができます。

4関数の記述

まず、関数には適切な名前を付ける必要があります。関数名を見ると、関数と関数の目的を知ることができます。機能のレベルは5レベルを超えないようにするのが最善です。1つは効率が低下すること、もう1つは読みやすさが低下することです。各機能は明確にコメントされ、すべての機能コードは統一されたスタイルで記述されます。アラインメント。関数内のスタック変数には、使用する前に初期値を割り当てる必要があります。また、組み込みRAMは一般的に少ないため、スタックをオーバーフローさせないように注意してください。乗算や除算などの効率的なコーディング方法を使用してみてください。シフトすることで実現できます。16ビットコントローラーで実行するプログラムを作成する場合は、関数整数パラメーターとローカル整数変数に16ビットを使用します。これは、8ビット整数変数を使用する場合、システムは8ビットオーバーフローを防ぐために追加の作業を行う必要があるためです。スペースを節約するだけでなく、効率も低下します。この現象は、分解して比較することで確認できます。

5.ドライバーに電話します

通常、ドライバーは2か所で呼び出されます。1つはパトロールによって呼び出される関数で、もう1つは割り込み処理関数です。同じヘッダーファイルを含む複数のソースファイルが存在する場合があります。ヘッダーファイルを設計するときは、定義が繰り返される問題を回避してください。方法は次のとおりです。例としてCHARGERモジュールの定義を取り上げます。ヘッダーファイルは次のように記述されます。

#ifndef _CHARGER_H
#define _CHARGER_H
/*函数声明*/
#endif

おすすめ

転載: blog.csdn.net/weixin_43704402/article/details/114664347