1

シリアル ポートを 460800 ボー レートで実行しています。データは継続的に送信されます。シリアル ドライバ データは、ソケットを使用してデータをネットワーク アプリケーションに送信するユーザー空間アプリケーションに渡されます。ときどき、ISR またはその他の割り込みの実行に時間がかかりすぎるため、シリアル ドライバーの HW Fifo オーバーランが発生します (イーサネット、シリアル、および gp_timer 割り込みのみがあります)。また、イーサネットとシリアルの両方の割り込みが割り込みキューにあり(私の推測)、シリアルドライバーの割り込みよりもイーサネットドライバーの割り込みが優先され、その間にシリアルドライバーのHWFIFOがオーバーフローする場合があると思います。

ネットワークアプリケーションへのデータ転送を無効にした瞬間、ユーザー空間のすべてのデータが正常に受信されました。それは、問題を引き起こしているのはイーサネットドライバーである可能性があると私に信じさせます。

シリアル割り込みの優先度を変更して、イーサネット ドライバーの割り込みより先に処理されるようにしたいと考えています。優先度を変更することで問題が解決すると思いますか?

Linux 2.6.32 ARMV7 を使用しています。

4

1 に答える 1

1

どのバージョンのパッチを試すのがよいかわかりません。最初にバージョン 2.6.33 を適用し、パッチが問題なく適用される場合はそれを使用し、適用されない場合は 2.6.31 を試してください。パッチ。

パッチの欠点は、Linux がプリエンプト可能になることです。そのため、いつスワップ アウトされるかわからないため、注意が必要です。これは、ミューテックスを使用して、スレッドなどの間で共有されるデータを保護することを意味します。自分のしていることを理解していれば、大きな問題ではありません。

Windows で動作する理由は運です。Windows でテストを実行し、システムに大きな負荷がかかる場合でも動作しますか? 疑わしい。適切に設計されたリアルタイムシステムでは、システムの負荷に関係なく常に機能します。

于 2013-01-13T17:52:50.883 に答える