1

MCB1700評価ボードのプログラムを開発したい。PCのクライアントソフトがHDDから画像を読み込みます。次に、ソケット (イーサネット) を介して画像を MCB1700 評​​価ボードに送信します。MCB1700 のサーバーは、ソケット接続を介して PC から画像を受信し、LCD に表示します。

また、サーバーは次のタスクを実行する必要があります。

  • 画像を USB スティックに保存するには;
  • USB スティックから画像を読み取り、ソケットを介してクライアントに送信します。
  • CAN経由で情報を送受信するには
  • COM ロギング。

ソケット接続は、CMSIS および RL-ARM ライブラリを使用して実装できます。

しかし、私が理解している限り、どちらの場合も、ソフトウェアは着信 TCP 接続をリッスンし、ネットワークのイベントを無限ループで処理する必要があります。Keil のすべての例は、そのような原則に基づいています。

私はいつも、組み込みプログラミングで無限ループを使用するのは悪い方法だと思っていました。しかもこんな面白い発言を読んだ

「RTOS なしで (1 つまたは複数のタスクをループで実行することにより) リアルタイム プログラムを作成することは確かに可能です」

全てのイベントを割り込みで処理した方が良いと思います。

CMSIS および RL-ARM ライブラリのソケット接続を使用し、割り込みを処理することによってすべてのソフトウェアを整理することは可能ですか? 私のサーバー (MCB1700 上) は、多くのタスクを実行する必要があります。ソフトウェアで RTOS RTX を使用する必要があると思います。そうじゃない?RTX なしでソフトウェアを実装した方が良いですか?

4

1 に答える 1

3

単純なリアルタイム システムは、多くの場合、「ビッグ ループ」アーキテクチャで動作し、タイム クリティカルなイベントが割り込みによって処理されます。これは「悪い」アーキテクチャではありませんが、少し柔軟性がなく、スケーリングが不十分であり、変更がシステムのタイミングやすべての部分に影響を与える可能性があります。

RL-TCPnet がこのように動作しなければならないというのは事実ではありませんが、スタンドアロンで実行するように設計されており、サンプルはそのように動作するため、他のライブラリに依存せずに最も幅広い適用性があります。これらは単なる例であり、RL-TCPnet のみを示すことを目的としています。その意味で、例は現実的ではなく、要件に合わせて調整する必要があります。

すべてのアプリケーション コードが割り込みハンドラーで実行され、ネットワーク スタックがスレッド コンテキストの無限ループのサービスであるシステムを考案するかもしれませんが、アーキテクチャ的には、おそらく「ビッグ ループ」アーキテクチャよりもはるかに悪いです。非常に長い割り込みハンドラを使用すると、優先度の高いものが枯渇し、優先度の低いもののリアルタイム応答に影響を与えます。満足のいくスケジュールを立てるのが難しいシステムになってしまいます。さらに、すべてのライブラリ ルーチンが割り込みハンドラでの実行に適しているわけではないため、かなり制限されます。

RTOS では優先順位の低いスレッドでネットワーク スタックを処理することができます。このような操作のフレームワークについては、ドキュメントの「RTX カーネルで RL-TCPnet を使用する」セクションで説明されています。. これには RL-RTX カーネル ライブラリを理解して使用する必要がありますが、「ビッグ ループ」コードに関する留保と、システムが実行する必要があるタスクの説明を考慮すると、どのような場合でもそれを実行する必要があるように思えます。別の RTOS を使用することを選択した場合、RL-TCPnet は任意の RTOS で同様に機能します。

于 2012-01-07T20:17:43.723 に答える