主要なサイクルが 10KHz で実行されるリアルタイム組み込みアプリがあります。フラッシュから起動するように構成された TI TMS320C 上で動作します。最近、初期化された配列をソース ファイルに追加したところ、突然タイミングが狂いました (複雑すぎてうまく説明できません - 基本的に、シリアル ポートの書き込みが時間どおりに完了しなくなりました)。
これについて私を困惑させること:
- 初期化された配列を宣言するだけで、新しいデータにアクセスすることすらありません。
- サイズに依存します - 問題は、配列が 40 ワードを超える場合にのみ発生します。
- リンク マップ内のデータ セグメントがオーバーフローしていないことはわかっています。
- データ キャッシュがないため、キャッシュの一貫性が損なわれることはありません。
フラッシュ内の .cinit セグメントのサイズを単純に大きくすると、コードのタイミングにどのように影響するかについてのアイデアはありますか?
追加情報:
コードが移動したのではないかと考えましたが、データから十分に分離されています。すべてのコード セグメントがバグの前後で同じアドレスを持っていることをメモリ マップで確認しました。また、満杯のセグメントがないことも確認しました。マップ内で変化するアドレスは、.cinit セクションの一部のみです。そのセクションには、RAM の変数を初期化するために使用されるデータ値が含まれています (私の配列など)。main() が呼び出された後はアクセスしないでください。