2013年6月26日水曜日

PIC C18 メモ(ファイル分割/hファイル)

-----------------------------
ファイル分割
-----------------------------
ファイル分割(*1)の利点は、
  • コンパイル時間の短縮
  • 関数の部品化による資産活用
  • 複数開発者で並行作業
などか。一方次のような点が、
  • RAMの使用量を見ていると、ファイル分割することで増えてしまう場合がある
  • 分割しても、相互の関係が深いと、プロトタイプ宣言が多く必要となるため、小規模の場合はかえって煩雑になる
ということで、
  • hファイルにプロトタイプ宣言や、構造体等の定義、宣言部を分けることで、全体を見やすくする
  • hファイルに相互の関係性が表れる
  • 関係の薄い部分は分割する
改造依頼があって二年前のプログラムを見直した時に、着目すべき個所が見つけやすく、不必要な部分は安心してブラックボックスのままににしておけることで、メリットを実感できた。
 -----------------------------
hファイル・ガイドライン(*2)
-----------------------------
  • ファイル間にまたがる関数や変数の宣言を一ヶ所にまとめる
  • 関数のプロトタイプは、ヘッダファイルのみで宣言
  • ヘッダファイルでメモリが確保される変数の定義をしない(*3)
  • ヘッダファイルには、実体のない定数定義( #define )や宣言
    構造体等( struct, union, enum )の宣言
    typedef による外部変数、外部関数の宣言
  • ヘッダファイルに実行コードを書かない
  • 他から使われることのない関数をヘッダで宣言して公開しない
  • ソースファイルの中で完結する関数は static をつけておく
  • 多重インクルードを防ぐため、インクルードガードに使う名前の付け方を決めておく
  • 宣言の重複は問題なし(エラーにならない)
  • #defineは、何度呼び出されても構わない
  • Configuration は実行コードなので hファイルに記述しない

(*1)ファイル分割とは、複数の Cファイルを個別にコンパイル(oファイル)し、リンカがオブジェクト、ひとつのバイナリファイル(hexファイル)を作る。
(*2)「組込み現場のCプログラミング/標準コーディングガイドライン」(p104~)より
(*3)定義の重複は関数や変数の実体を作ることになるので重複するとエラーになる
(おまけ)最初の頃は、編集しやすいように Cファイルを分割して、インクルードしていただけだった。この場合、コンパイル単位は一つであり、インクルードする場所や順番を意識して作らないとならない。
よく言われているように「ひと月たてば他人の作ったソフトになる」の通りなので、「ガイドライン」は重要。

2010.01 - 2013.07.02