問題タブ [embedded]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - SD/USB へのバースト書き込みにより、組み込み Linux でタイム クリティカルなアプリが失速する
私は、ARM9 をハードウェア ビデオ エンコーダ チップに接続し、ビデオを SD カードまたは USB スティックに書き込む組み込み Linux プロジェクトに取り組んでいます。ソフトウェア アーキテクチャには、データをバッファーのプールに読み込むカーネル ドライバーと、マウントされたリムーバブル デバイス上のファイルにデータを書き込むユーザーランド アプリが含まれます。
特定のデータ レート (約 750kbyte/秒) を超えると、約 5 秒ごとに、ユーザーランドのビデオ書き込みアプリがおそらく 0.5 秒停止するのが見え始めます。これは、カーネル ドライバーがバッファーを使い果たすのに十分です。また、バッファーの数を増やすことができたとしても、ビデオ データは、リアルタイムで行われている他の処理と同期する必要があります (理想的には 40 ミリ秒以内)。これらの 5 秒の「ラグ スパイク」の間で、書き込みは 40 ミリ秒以内に完了します (アプリに関する限り、OS によってバッファリングされていることに感謝します)。
このラグスパイクは、Linuxがデータをディスクにフラッシュする方法に関係していると思います.pdflushは5秒ごとに起動するように設計されていることに注意してください. ストールが終わるとすぐに、ユーザーランド アプリは迅速にサービスを提供し、(オーバーフローしなかった) バッファーのバックログを書き込むことができます。
私が書き込んでいるデバイスは、合理的な究極のスループットを持っていると思います.15MBのファイルをメモリfsからコピーし、同期が完了するのを待つ(そしてUSBスティックのライトが点滅を止める)と、約2.7MBytes /秒の書き込み速度が得られました。
私は2種類の手がかりを探しています:
バースト書き込みによってアプリが停止するのを防ぐにはどうすればよいでしょうか? おそらくプロセスの優先順位、リアルタイムのパッチ、またはバーストではなく継続的に書き込むようにファイルシステム コードを調整することでしょうか?
カード/スティックへの書き込みバックログとスループットに関して、ファイルシステムで何が起こっているかをアプリに認識させるにはどうすればよいですか? ハードウェアコーデックのビデオビットレートをオンザフライで変更できます。これは、フレームをドロップしたり、最大許容ビットレートに人為的な上限を課したりするよりもはるかに優れています。
詳細情報: これは現在 Montavista 2.6.10 ベースのカーネルを実行している 200MHz ARM9 です。
アップデート:
- ファイルシステム SYNC をマウントすると、スループットが大幅に低下します。
- リムーバブル メディアは FAT/FAT32 でフォーマットされており、メディアを任意の Windows PC に接続して読み取ることができるように設計されている必要があります。
- たとえば、定期的に sync() または fsync() を呼び出すと、毎秒定期的なストールが発生し、スループットが許容できないほど低下します
- fopen() などではなく、write() と open(O_WRONLY | O_CREAT | O_TRUNC) を使用しています。
- 上記の「Linuxリアルタイムファイルシステム」についてオンラインですぐに見つけることができません。リンク?
これが理にかなっていることを願っています。stackoverflow に関する最初の組み込み Linux の質問は? :)
embedded - vxWorks の「カーネル シェル」と「ホスト シェル」の違いは何ですか?
vxWorks RTOS には、組み込みシステムにコマンドを発行できるシェルがあります。
ドキュメントでは、カーネル シェル、ホスト シェル、およびターゲット シェルについて言及しています。3つの違いは何ですか?
embedded - vxWorks は同じ優先度の 2 つのタスクをどのように処理しますか?
vxWorks 組み込みシステムには、同じ優先度 (110) を持つ 2 つのタスク (T1 と T2) があります。
両方のタスクを実行する準備ができている場合、通常の vxWorks スケジューラはこれをどのように処理しますか?
最初に実行するタスクは?
embedded - 組み込みプログラミングを学ぶのに最適なプラットフォーム?
私は組み込みプログラミングについて学びたいと思っています (主に C ですが、ASM についてもブラッシュアップしたいと考えています)。最適なプラットフォームは何かと考えていました。Atmel AVR を使用して stk500 でプログラミングした経験があり、比較的簡単であることがわかりました。特に AVR Studio と、レジスタの状態を表示できるデバッガが気に入っています。
しかし、時間をかけて学ぶとしたら、むしろ業界で流行している何かについて学びたいと思います。私はARMを考えています。それは、誰かがより良い提案をしていない限りです。
また、参考資料も探しています。ARM Web サイトで本のセクションを見つけました。技術的に優れた本があれば、ぜひお知らせください。
私が探している最後のものは、いくつかのボタンなどを備えた STK500 のようなプロトタイピング/プログラミング ボードです。
ありがとう=]
memory - メモリの領域が非キャッシュとマークされるのはなぜですか?
組み込みアプリケーションでは、アウト ターゲット ボードで有効なさまざまなアドレス範囲を説明する表があります。このテーブルは、MMU のセットアップに使用されます。
RAM アドレス範囲はキャッシュ可能としてマークされていますが、他の領域はキャッシュ不可としてマークされています。何故ですか?
debugging - 富士通Softuneデバッガの制御
他のアプリケーション (Eclipse など) で富士通 Softune デバッガを制御する方法はありますか? Softune のドキュメントに記載されているコマンドを送信して出力を解析することを考えていますが、他のアプローチも歓迎します。
c - Pic18 micro に最適な C コンパイラは何ですか?
マイクロチップ PIC18F252 に基づく新しいプロジェクトを開始しています。使用するのに最適な 'c' コンパイラは何ですか?
shell - Tornado / VXWorks シェル出力をリダイレクトするにはどうすればよいですか?
最近、Tornado 2 のシェルを使用して、キットで何が起こっているかをデバッグする組み込み C/C++ プロジェクトに取り組んでいます。このアプローチの唯一の問題は、複雑なシステムであり、その結果、かなりの量の出力が得られることです。Tornado は、新しい情報が到着するたびに「便利に」ウィンドウをスクロールします。つまり、エラーを見つけた場合、サイトからすぐに消えて見えなくなります。上にスクロールして見るたびに、システムはより多くの情報を追加するため、それを表示する唯一の方法は、ハードウェアを取り外すことです.
Tornado からの出力をリダイレクトする方法を誰かが持っているかどうか知りたいですか?
受信情報にフィルターを適用できるように、小さな python アプリからすべてをログに記録する方法があることを期待していました。Tornado プロセスに接続しようとしましたが、情報を含むウィンドウは標準の CEditCtrl ではないため、そのようにテキストを抽出することは行き止まりでした。
アイデアはありますか?
[編集] Tornado 2.1.0 しか実行しておらず、より新しいバージョンへのアップグレードは私の手に負えないことを述べておくべきでした。
[Edit2] Tornado で問題となっているウィンドウは、WinID によると「AfxFrameOrView42」です。
embedded - 組み込み/リアルタイム オペレーティング システムへの Windows ソフトウェアの移植
Windows 環境を対象とする既存のコードベースがあり、将来を見据えて、これを可能な限りクロスプラットフォームにしたいと考えています。クロス プラットフォーム ライブラリを使用して、標準の Linux ディストリビューションである程度の成功を収めましたが、これをリアルタイムまたは組み込みオペレーティング システムに拡張したいと考えています。
コードベースの大部分をそのようなシステムに移植することは可能でしょうか?それとも、その環境を対象とした再実装が必要でしょうか? 部品を再作成する必要がある場合、これらのシステムの開発には別のタイプの設計アプローチが必要ですか? 一部のベンダーは開発用に独自の IDE を提供していますが、これらは必要ですか、それとも GNU ツールチェーン タイプのビルド プロセスで標準化することはできますか、または可能ですか?
潜在的なポットホールは、IPC 処理の違いである可能性がありますが、さらに暴露しないと、詳細を把握することは困難です.
注: 現在は Windows ベースですが、Win32 API (主に COM) または Windows の型が特に頻繁に使用されるわけではありません。
ありがとう
編集:: コードベースは C\C++ です
.net - .Net マイクロ フレームワークを学習するのに適したマイクロコントローラー開発ボードは何ですか?
Micro Framework Emulator を除く ;)