こんにちは、チームの皆さん
この FEE の動作についてフィードバックを提供していただけますか?
Fee_Init実行時間はレコードごとに約 1.9 ミリ秒増加すると予想されますか?これはかなりの遅延のようです。
Fee_Example_S32K344では、初期化ルーチンにMEMIF_IDLEを待機するwhileループが含まれています。書き込みとリセットのサイクルを繰り返すと、このルーチンに必要な時間が著しく増加します。
例:
すべてのデータが正常に保存されるように、FEE への書き込みにはブロッキング操作を使用しています。
簡略化したシナリオは次のようになります。
リセット後、初期化ルーチンにかかる時間が長くなります。
RTDバージョン3.0.0を使用していますパッチはインストールされていません。
ありがとうございました。
BR、ダニエル
こんにちは@danielmartynek 、
それは正常です。Fee ドライバーは、ユーザー データを仮想ブロックの形式で Fls メモリに保存することによって機能します。Fls への書き込みタスクごとに、レコード (ブロック ヘッダー + ユーザー データ + ステータス有効/無効ブロック) が作成されます。つまり、書き込みサイクルが増えると、より多くのレコードが作成されることになります。リセット後、Fee が初期化されます (Fee_Init + fee_mainfunction + MemAcc_mainfunction)。これは、Fls_memory 内のすべてのレコードをスキャンしてブロック ステータス テーブルを再構築することから構成されます。SO、書き込みサイクルの数が多く、初期化をスキャンする必要があり、レコード/ブロックの検証が大きくなります。
よろしくお願いいたします。
ニ
こんにちは@Nhi_Nguyen 、
あなたの言いたいことは分かりますが、レコードあたり 2 ミリ秒というのはかなり長いように思えます。
品質レポートのプロファイリング レポートには、実際にはマイクロ秒単位でタイミングが表示されます。
よろしくお願いいたします。
ダニエル
こんにちは@danielmartynek 、
実際、Fee_Init() は、いくつかのグローバル変数といくつかのレジスタを設定し、fls のステータスをチェックするだけですが、初期化タスクには {MemAcc_Init()、Fee_Init()、(Fee_Mainfunction()、MemAcc_Mainfunction()、fls がアイドル状態になるまで待機する Getstatus) のループが含まれます}。
クラスター ヘッダー、ブロック ヘッダー、データ ブロックの書き込み、ブロックのフラグ ステータスの書き込みをスキャンするループ。
または、Fee_Write() はグローバル変数を設定するだけですが、書き込みタスクには {Fee_Write(), loop of (Fee_mainfunction(), MemAcc_MainFunction(), GetStatus)} が含まれます。
これらのタスクの実行時間は、ページ サイズ、頻度、キャッシュ、仮想ブロックのサイズなどの構成によって異なります。
パッケージに添付されていた Fee の例で、データが 4 バイトの書き込みタスクを実行してみました。約 1,133 ミリ秒かかりました。
プロファイリング レポートは、タスクではなく各関数の実行時間のみを対象としています。
よろしくお願いいたします。
ニ