私は、設計グループのハードウェアと直接やり取りするいくつかのルーチンを作成しています。このシナリオをできるだけ簡潔に説明しようと思います。
私たちのハードウェアは、私が説明しているファームウェアを実行する組み込み CPU に対してさまざまな種類の割り込みを生成します。デバッグ計画の性質上、処理される割り込みの数を制限したい場合があります。この割り込み制限は、外部レジスタ インターフェイスを介して実行中のファームウェアに渡されます。
それで!と の 2 つの機能がinthandler()
ありlimit_interrupts()
ます。それらは基本的に次のようになります。
ファイル interrupt_handler.cpp:
void inthandler(){
if (num_ints_serviced < int_limit)
{
...handle interrupt...
num_ints_serviced++;
}
}
ファイル external_command_handler.cpp:
void limit_interrupts(){
int_limit = <read int limit from external register>;
}
現在、私はグローバル変数として宣言していますint_limit
。num_ints_serviced
これにグローバルを使用しないようにする方法があるかどうか知りたいです。
私はこれを行う方法について漠然とした考えを持っています:
- 呼び出される
num_ints_serviced
たびにその値がリセットされないように、静的 int として宣言します。inthandler()
(ただし、これにより別の問題が発生します。これは、テストのある時点で、そのカウンターを 0 にリセットしたいからです。現在reset_in_counter()
、グローバルを変更する別の関数を呼び出すだけです。) - 何らかの方法でスコープをいじって、
int_limit
interrupt_handler.cpp 内でローカルに宣言できるようにしますが、external_command_handler.cpp から変更します。多分名前空間を使用していますか?詳細はわかりません。
グローバルの使用を避けるべきであるというベスト プラクティスがあることは知っていますが、いくつかの用途があります。これはそれらの用途の 1 つにすぎないのでしょうか。おそらく、この問題を難しくしすぎているのかもしれません (結局のところ、この場合はグローバルの使用が有効です)。
アドバイスをよろしくお願いします。