2136326_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2136326_ja-JP

2136326_ja-JP

lwip_FreeRTOS_s32k396' サンプルプロジェクトと失敗

現在、生の TCP クライアント実装を備えた S32K396 MCU を使用していますが、問題なく動作しています。ただし、モジュールサプライヤーは FreeRTOS で lwIP にスイッチすることを要求しています。

「lwip_FreeRTOS_s32k396」サンプル プロジェクトをインポートし、それを K396 ボードにフラッシュすると、プログラムは prvPortStartFirstTask() を実行するときに vPortEnterCritical() 関数に入ります。この問題を解決するにはどうすればいいでしょうか

S32DS バージョン 3.5

RTD バージョン 4.0

lwip バージョン 1.0.4

freeRTOS バージョン 4.0

Re: lwip_FreeRTOS_s32k396' example project and failure

こんにちは@zhangzhixingさん

変数 uxCriticalNesting を 0 に初期化すると、いくつかの重要な目的が達成されます。

  1. システムはクリティカルセクションの外側から開始されます
    システムの起動時には、クリティカルセクションはまだ入っていません。uxCriticalNesting を 0 に初期化すると、このクリーンな状態が反映され、割り込みがデフォルトで有効になることが保証されます。

  2. タスクごとのコンテキスト追跡
    FreeRTOS の各タスクは、タスク制御ブロック (TCB) の一部として独自の uxCriticalNesting 値を維持します。この値はコンテキストスイッチ中に保存および復元され、タスクごとに正しい割り込み状態が保持されます。

  3. システムの安定性を確保
    初期化時にゼロ以外の値を設定すると、割り込みが意図せず無効になり、予期しない動作やシステムハングが発生する可能性があります。ゼロ値は、スケジューラと割り込み処理が一貫した安全な状態で開始することを保証します。

lwIP の例 (特に Thread API または raw API を使用する場合) では、適切な割り込みとクリティカル セクションのマネジメントが不可欠です。uxCriticalNesting = 0 から始めることで、ネットワークスタックとスケジューラが最初から確実に動作することが保証されます。

よろしくお願いいたします。

パベル

Re: lwip_FreeRTOS_s32k396' example project and failure

こんにちは@zhangzhixingさん

仕事の忙しさにより返信が遅れたことをお詫び申し上げます。

ボードは問題なく正常に起動しました。ただし、プロジェクトにはいくつかの小さな調整が必要です。

ペリフェラル > ピン: TX_CLK 信号に方向が指定されていません。入力に設定されています。また、初期オプションとして「最速」設定を選択しました。

PavelL_1-1753252879635.png

ペリフェラル > マネージド SDKs コンポーネント: ピン ドライバ コンポーネントが不足していたため、追加されました。

PavelL_2-1753252945447.png


クロック設定: 構成は正しいです。FXOS 40 MHz クロックは、ボードで使用されている水晶と一致しています。
PHY初期化: device.cのEth_T_InitPhys();の呼び出し必須ではないためコメントアウトされました。TJA1103 PHY は、基本的な構成にピンストラップのみを使用します。

私はTJA1103-SDBRボードを使用しています - TJA1103はTXCでクロックを生成するためにrev-RMIIモードにする必要があります -> CONFIG4にジャンパー2-3を追加しました

PavelL_3-1753253078564.png


PavelL_4-1753253345703.png

アップデート:

電源投入後の動作を改善するには、device.c 内の PIT を含むすべての行をコメント化します。(この例ではPITは使用されません):

// IntCtrl_Ip_InstallHandler(PIT0_IRQn、PIT_0_ISR、NULL_PTR);
// IntCtrl_Ip_SetPriority(PIT0_IRQn, 4);
// IntCtrl_Ip_EnableIrq(PIT0_IRQn)


// Pit_Ip_Init(PIT_INST、&PIT_0_InitConfig_PB_VS_0);
// Pit_Ip_InitChannel(PIT_INST、PIT_0_CH_0);
// Pit_Ip_EnableChannelInterrupt(PIT_INST, CH_0);

// PitPeriod = Clock_Ip_GetClockFrequency(PIT0_CLK) / 1000;
// Pit_Ip_StartChannel(PIT_INST, CH_0, PitPeriod);

よろしくお願いいたします。

パベル

Re: lwip_FreeRTOS_s32k396' example project and failure

コードは追加していませんが、lwip_FreeRTOS_s32k396 プロジェクトをコンパイル、ダウンロード、デバッグしたときにこの問題が発生しました。

もう一つの質問があります:

uxCriticalNestingを0に設定する理由

zhangzhixing_0-1752830429511.png


Tags (1)
No ratings
Version history
Last update:
‎11-20-2025 04:54 PM
Updated by: