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