私は自分のデザインを追跡するのに多くの時間がありますが、何も超重大ではありません。 10ms +/-数ミリ秒は大したことではありません。しかし、同時に異なる時間にカウントされる10種類のタイマーがあるかもしれません。明らかに、私はMSP-430の独自のタイマーでそれぞれのタイマーをサポートするのに十分なタイマーを持っていません。マイクロコントローラの時間のためのグローバルタイマー割り込み
私の解決策は、1 KHzで発生するMSP-430マイクロタイマーのための単一のISRを作成することです。各ISRエントリの符号なしロングをインクリメントします(各ティックは1ミリ秒です)。私のコードのどこかで、以下のSET_TIMERとEXPIRED定義呼び出しを使用して、一定の時間が経過したかどうかを確認することができます。私の質問は、これは「グローバル」な時間を保つ良い方法ですか?
タイマーの定義:
typedef unsigned long TIMER;
extern volatile TIMER Tick;
#define SET_TIMER(t,i) ((t)=Tick+(i))
#define EXPIRED(t) ((long)((t)-Tick)<0)
タイマー割り込みサービスルーチン:
void TIMER_B0_ISR(void)
{
Tick++;
}
使用例1つのファイルに:
case DO_SOMETHING:
if (EXPIRED(MyTimer1))
{
StateMachine = DO_SOMETHING_ELSE;
SET_TIMER(MyTimer1, 100);
}
break;
case DO_SOMETHING_ELSE:
if (EXPIRED(MyTimer1))
...
これは素晴らしいアイデアのようですね!あなたはその事例を持っていますか? – Russell
@Russellこれは商用コードです。申し訳ありませんが、チャンスはありません。 – tofro