腕時計の沼、オーディオの沼、PCの沼。『タクジの沼』
AUTOSARアプリケーションでのECUの初期化は、BSWのEcuMモジュールによって処理されます。 ブートローダとC Initコードの初期化シーケンスが完了した後、「main()」から呼び出される最初のAPIはEcuM_Init()になります。
下の図に示すように、スタートアップは 2 つの部分に分かれています。 最初の部分は StartPreOs シーケンスで、2 番目の部分は StartPostOs シーケンスです。
[EcuM_Init() によって処理される] 初期化の最初の部分では、次のアクティビティが行われます。
マルチコア ECU の場合、まずマスターコアを初期化し、スレーブコアの BlockZero と BlockOne ドライバーを初期化してから OS を起動します。 StartPreOs シーケンスの最後のステップは、常に OS を開始することです。 この時点で、EcuM は制御を一時的に放棄しますが、OS が起動すると制御を取り戻すだけです。
OS が起動した後、EcuM_StartupTwo() が Init_OsTask から呼び出され、制御が EcuM モジュールに戻されます。 次に、StartPostOs シーケンスが開始され、次のステップが EcuM_StartupTwo() によって処理されます。
マルチコア ECU の場合、マスター コアの SchM_Init と BswM_Init が最初に呼び出され、続いてスレーブ コアで同じ手順が実行されます。 BswM が初期化された後、RTE が開始され、残りの初期化が続行されます。
BlockZero および BlockOne ドライバーで行われる初期化は、OS に依存しない低レベルの初期化です。 AUTOSAR は、割り込み、BlockZero および BlockOne ドライバーの初期化のためのコールアウトを提供します。 これらのコールアウトはデフォルトで初期化シーケンスの一部ですが、これらのコールアウト内の実際の実装はターゲットに依存します。 AUTOSAR およびツール チェーン ベンダーは、推奨事項のみを提供します。 これらのコールアウトで正確に何が行われるかは、システム設計者の裁量に任されています。
次のモジュールは通常、BlockZero ドライバーのコールアウト、Det_Init()、Det_Start()、Dem_MasterPreInit() で初期化されます。 次のモジュールは通常、BlockOne ドライバー コールアウトで初期化されます。 EcuM は、次のシャットダウンに使用されるシャットダウン ターゲットを選択する可能性を提供します。 このターゲットは、ECU がシャットダウン シーケンスを実行しているときに EcuM によって使用されます。 可能なシャットダウン ターゲットは、SLEEP、RESET & OFF です。
EcuM モジュールは、OS、スケジューラ、Bsw モード マネージャー、およびその他のいくつかの BSW ドライバー モジュールを初期化および初期化解除します。 また、ECU のスリープ、ウェイクアップ、およびシャットダウンも管理します。 EcuM モジュールには、フレックスと固定の 2 つのバリエーションがあります。 Flex は 2 つの中でより高度です。マルチコア ECU に加えて、部分的または高速なウェイクアップ、BSW、RTE、APPL のインターリーブ ウェイクアップ、さらには複数の実行状態をサポートします。 上記のすべての説明は、Flex EcuM に関するものです。