目次

制御のファームウエア

 制御のために書かれたプログラムをファームウエア
 と呼びます。

 ファームウエアは、ハードウエアの特徴を踏まえて
 作成しないと、思わぬバグを出すことがあります。

 ファームウエアの構造は、次の固定形態でまとめる
 のが、よいとされています。



 ここでは、Cの記述を意識しますが、関数型の
 言語であれば、ほぼ同じです。

 macro definition

  マクロ定義は、データ型の入力を減らしたり
  GPIOのピンアサインを意識しないで済むように
  ラベルを定義しておきます。

  自分の場合、データ型は次のように決めて使ってます。

typedef unsigned char  UBYTE ;
typedef   signed char  SBYTE ;
typedef unsigned short UWORD ;
typedef   signed shoft SWORD ;

  変数をひとつ、ふたつ用意するのなら構いませんが
  10、20と宣言して利用すると、タイプ量が半端
  ないので、マクロ定義した方を多用してます。

  よく使う定数も、次のようにマクロ定義してます。

#define MASK0F 15
#define MASKFF 0xff
#define BITLOC 4

  マクロ定義しておけば、忘れてもラベル名で
  以前と同じ内容を扱えます。

 global variables

  Cでは、グローバル変数を使う頻度を少なくするため
  関数内部でローカル変数を宣言して使う仕様です。

  割込みで使う変数や複数の関数が参照に使う変数まで
  ローカルにし、可読性の悪いプログラムにしてしまう
  のは、考えもの。

  複数の関数から、参照すると判断できた時点で、特定
  関数のローカル変数から、グローバル変数に変える方
  が、開発効率がよくなります。

  割込みで使う変数は、グローバル変数にしないと
  割込みハンドラと普通の関数の間で、情報交換が
  面倒になり、オーバーヘッドの時間が高速処理の
  足を引っ張ることにもなりかねません。

 main

  main関数の中では、次のシーケンスで処理を
  並べて、永久ループさせます。
  1. I/O初期化
  2. 割込み関係初期化
  3. パラメータ初期設定
  4. 割込みフラグがセットされていれば、割込みハンドラを実行
  5. 条件に合致した処理を実行
  6. 指定された処理を実行
  7. 4にもどる
  制御に関係するプログラムは、動作を   止めずに、フラグや条件を使って処理   を継続するカタチにもっていきます。   フラグや条件を扱う変数は、グローバルにし   該当する処理専用とします。   該当処理専用にすれば、バグが入りにくく   なります。  function   main関数から呼び出す関数を定義します。   main関数との情報交換には、グローバル変数   を利用し、関数の中ではローカル変数を使う   カラクリとします。  interrupt service routines   割込み発生時の処理を定義します。   割込み発生時に動かす関数を、割込みハンドラと   呼んで、特殊な指定が必要。   割込みハンドラでは、割込みがあったことを   main関数に通知するために、グローバル変数   のフラグを利用します。   main関数では、フラグを監視して割込み発生を   認識します。このフラグをイベント通知フラグ   と呼びます。

目次

inserted by FC2 system