2016-09-06 8 views
3

いくつかのタイマー/タイムアウトを実装するために、Runnableのサイクル時間を使用する非常に多くのコードを見てきました。問題は、誰かがこのRunnableのサイクルタイムを変更することを決定した場合、タイマーが間違っていることです。 例:AUTOSAR 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)) 

答えて

0

問題は、誰かがこのRunnableをのサイクル時間を変更することを決定した場合、タイマーが不正確になるということです。

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

ランナブルからタスクへのマッピングのような他のパラメータは、後の開発段階で積分器によって変更できますが、期間はSWCDの一部であり、したがって実装とも結合されます。

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

+1

は、ここではいくつかのユースケースです。 実装者は、しばしば設定ツールにアクセスすることさえできません。 (当然、彼/彼女はARXMLを見ることができます) 2.プロジェクト中にサイクル時間が変わることがあります 最適化の努力のために。次に、コードを調整する必要があります。 ベストケースでは、定義(ここではFOO_TIMER_100MS_REACHED)のみが影響を受けますが、より完全なコードを分析する必要があります。 3.他のプロジェクトで再利用する必要のあるSW-C用のコードを作成しています。 –

0

SWCDは実際にあなたの契約書であり、SWCDと開発者の責任で変更について議論する必要があります。そうでなければ、あなたのプロセスに欠陥があります。

他の側では、いくつかの方法があります。

  • たぶん、あなたはTimeService(Tm)をモジュールにClientServer上のインターフェイスを作成し、それを聞かせてあなたのSWCDのタイミングイベント期間
  • から一定の値を作成することができますセットアップ。 TmはいくつかのGPTによってサポートされている便利なSWタイマーを許可します。Predef Timers
  • SWCDにStbM-ServiceNeedsでClientServerインターフェースを作成します。 次に、同期タイムベースにアクセスできるはずです。 SWCDとコードを実装する人を作成 1人が、同じではないかもしれません:
+0

もう1つの答えでは、この問題のために1つの使用例を挙げました。 "あなたのSWCDタイミングイベント期間の定数値"は、実際に私が探しているものです... –

+0

私は一日中それらに遭遇するので、ユースケースの意味を知っています。 SWアーキテクトとして、私はこれらのSWCDを外部から作成することになっていますが、SWC開発者からのものもあるはずです。しかし、少なくともスケジューリングの部分はポイントの1つであり、SWアーキテクトはSWシステムに定義しなければならず、その変更はレビューによって明確にされるべきです。ええと、プロセスは扱いにくいかもしれません:)そしてツールこれらのツールにはコストがかかり、実際のフリー/ OSSはありません(artopは基本的なものですが、依然として会社のメールが必要です – kesselhaus

関連する問題