4

いくつかのタイマー/タイムアウトを実装するために Runnable のサイクル時間を使用する非常に多くのコードを見てきました。問題は、誰かがこの Runnable のサイクル時間を変更しようとすると、タイマーが正しくなくなることです。例:

#define FOO_TIMER_100MS_REACHED (10U)

FUNC(void, FOO_CODE) FOO_Cycle_10ms( void )
{
  static uint8 t = 0;

  if( t < FOO_TIMER_100MS_REACHED )
  {
    t++;
  }
  else
  {
    ; /* 100ms elapsed - do whatever is necessary */
  }
}

では、この Runnable 内から定期的にトリガーされる関数 FOO_Cycle_10ms のサイクル時間をどのように判断できますか? 上記の例に関して、私は次のようなものを探しています:

#define FOO_TIMER_100MS_REACHED ((uint8)(100U / CYCLE_TIME_FOO_Cycle_10ms))
4

3 に答える 3

0

問題は、誰かがこの Runnable のサイクル時間を変更しようとすると、タイマーが正しくなくなることです。

しかし、それは実際に起こり得るでしょうか?ソフトウェア コンポーネント記述 (SWCD) は、常に実装と強く結びついています。SWCD の実行可能な名前を変更したり、アクセス ポイントを削除したりすると、コードもコンパイルされなくなります。

ランナブルからタスクへのマッピングなどのその他のパラメーターは、後の開発段階でインテグレーターによって変更できますが、期間は SWCD の一部であるため、実装にも関連付けられています。

したがって、説明されている問題は発生しないはずです。これで質問の答えが得られない場合は、実際のユース ケースに関する詳細情報を提供してください。

于 2016-09-13T18:23:24.963 に答える