チームの皆さん、こんにちは。
私たちは NXP S32K588 をAUTOSARベースのプログラムで使用しており、 ETAS OS と EB MCALを組み合わせています。
いくつかのMCALコンポーネントは、タイムアウト方法を以下のいずれかに設定できるタイムアウト機構を提供しています:
タイムアウト方法が OSIF_COUNTER_SYSTEMに設定されている場合、影響を受けるドライバーは初期化シーケンス中にOsIf_GetCounter()を通じてOSIFカウンターにアクセスしようとします。
これらのドライバー初期化関数は EcuM_Init()から呼び出されるため、AUTOSAR OSは以下の方法でエラーを報告します:
エラーフック => E_OS_CALLEVEL
私たちの理解では、これはAUTOSAR OSカウンターAPIは タスク や ISRなどの有効なOSコンテキストからのみアクセスが許可されているのに対し、EcuM_Init()はOSスケジューラが起動する前に実行されるためです。
この状況に対処するための推奨されるアプローチについてアドバイスをいただけますか?具体的には:
こんにちは、
ありがとうございます。SW/RTDチームに追加のフィードバックがあれば聞いてみます。
BR、ペトル
こんにちは、
あなたの分析は正しいようです。OSIF_COUNTER_SYSTEMで設定されたドライバがOS起動前にEcuM_Init()から初期化されている場合、AUTOSAR OSの実装によってOsIf_GetCounter E_OS_CALLEVELが発生することがあります。
OS起動前の段階で初期化されるモジュールの場合、一般的な回避策は、OSベースのタイミングサービスの使用を避け、代わりにOSIF_COUNTER_DUMMY(または別のOS以外のタイミングソース)を使用することです。
具体的な推奨事項は、ETAS OSの実装方法や使用しているMCAL/RTDのバージョンによっても異なる場合があります。さらなる検証のためにS32DSとRTD(またはMCAL)バージョンを共有していただけませんか?
BR、ペトル