問題タブ [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.
operating-system - 組み込みオペレーティング システムの比較
私はさまざまな種類の組み込みオペレーティング システムに携わってきましたが、通常は、レガシー システムが持っていたものをすべて使用する必要がありました。今、私は新しい組み込みプロジェクトをゼロから始めるチャンスがあります。
システムの主な制約は次のとおりです。
- Web ベースのインターフェースが必要です。
- 入力はリアルタイムで処理する必要があります (したがって、真の RTOS が必要です)。
- 利用可能なメモリは 32MB の RAM と FLASH です。
チームが以前に使用したオペレーティング システムは、VxWorks、ThreadX、uCos、pSOS、および Windows CE です。
オペレーティング システムの選択に関する比較調査または取引調査を行っている人はいますか?
他に考慮すべきオペレーティング システムはありますか? (eCos と RT-Linux が提案されました)。
編集 - これまでのすべての応答に感謝します。残念ながら、すべてを「承認済み」としてフラグ付けすることはできません。
c++ - 組み込みハードウェアによるテストの自動化
組み込みハードウェアで直接テストを自動化して成功した人はいますか?
具体的には、ハードウェア層モジュールの単体テストを自動化することを考えています。ハードウェア層のコードにもっと自信を持つ必要があります。私たちのプロジェクトの多くは、割り込み駆動型タイマー、ADC、シリアル IO、シリアル SPI デバイス (フラッシュ メモリ) などを使用しています。
これは努力する価値がありますか?
通常、以下を対象としています。
プロセッサー: 8 ビットまたは 16 ビットのマイクロコントローラー (一部の DSP 要素)
言語: C (場合によっては c++)。
multithreading - RTOS とサイクリック エグゼクティブを混在させることは理にかなっていますか?
小さな組み込みシステム プロジェクトで、スレッドで実行したいコードがあるため、組み込み RTOS (eCos) の上に構築することを選択しています。
以前は、それぞれがステート マシンとして実装されたタスクを駆動する main() で巡回エグゼクティブを使用していました。一部のタスクでは、タスクを多くの細かい状態に分割する必要があるため、コードが非常に複雑になるという問題が発生しました。
RTOS に切り替えると、各タスクに独自のスレッドを割り当てると、各スレッドのスタックのメモリ使用量が急速に増加することがわかりました。(64k しかなく、通信バッファー用のメモリーが必要です)
通信タスクにトレッドを使用し、循環エグゼクティブに別のスレッドを使用することを検討しています。巡回エグゼクティブは、他の論理タスクを駆動します。
このように RTOS と周期的なエグゼクティブを混在させることは理にかなっていますか?
embedded - 複数の vxworks キューでタスクを待機するにはどうすればよいですか?
2 つのメッセージ キューを介して送信される高優先度メッセージと低優先度メッセージの両方を処理するために 1 つのタスクを必要とする vxWorks 設計があります。
特定の優先度のメッセージは、FIFO の順序で処理する必要があります。
たとえば、優先度の高いすべてのメッセージを受信順に処理してから、優先度の低いメッセージを処理します。優先度の高いメッセージがない場合は、優先度の低いメッセージをすぐに処理します。
これを行う方法はありますか?
synchronization - テストアンドセットは何に使用されますか?
テストアンドセットのウィキペディアのエントリを読んだ後も、「テストアンドセットは何に使用されるのか」という質問が残ります。
(ウィキペディアで説明されているように)Mutexを実装するためにそれを使用できることを理解していますが、他にどのような用途がありますか?
c++ - 組み込みシステムでのC++の使用
組み込みシステムでは、C ++のどの機能を避ける必要がありますか?
次のような理由で回答を分類してください。
- メモリ使用量
- コードサイズ
- 速度
- 移植性
編集:回答の範囲を制御するためのターゲットとして64kramを備えたARM7TDMIを使用してみましょう。
embedded - 自分のerrno値を定義するにはどうすればよいですか?
カーネル空間で実行されるモジュール(デバイスドライバー、ミドルウェアなど)を開発する場合、操作が失敗する理由を把握する方法が必要です。
VxWorksでは、errnoメカニズムがこれを行うための良い方法のようです。
自分のerrno値を定義することは可能ですか?
c - フラッシュ メモリのセグメントにデータを追加すると、プログラムのタイミングがどのように狂うのでしょうか?
主要なサイクルが 10KHz で実行されるリアルタイム組み込みアプリがあります。フラッシュから起動するように構成された TI TMS320C 上で動作します。最近、初期化された配列をソース ファイルに追加したところ、突然タイミングが狂いました (複雑すぎてうまく説明できません - 基本的に、シリアル ポートの書き込みが時間どおりに完了しなくなりました)。
これについて私を困惑させること:
- 初期化された配列を宣言するだけで、新しいデータにアクセスすることすらありません。
- サイズに依存します - 問題は、配列が 40 ワードを超える場合にのみ発生します。
- リンク マップ内のデータ セグメントがオーバーフローしていないことはわかっています。
- データ キャッシュがないため、キャッシュの一貫性が損なわれることはありません。
フラッシュ内の .cinit セグメントのサイズを単純に大きくすると、コードのタイミングにどのように影響するかについてのアイデアはありますか?
追加情報:
コードが移動したのではないかと考えましたが、データから十分に分離されています。すべてのコード セグメントがバグの前後で同じアドレスを持っていることをメモリ マップで確認しました。また、満杯のセグメントがないことも確認しました。マップ内で変化するアドレスは、.cinit セクションの一部のみです。そのセクションには、RAM の変数を初期化するために使用されるデータ値が含まれています (私の配列など)。main() が呼び出された後はアクセスしないでください。
embedded - 初心者のためのシンプルなシリアルAVRプログラマー
AVR atMegaおよびatTiny用のシリアル(RS232)プログラマーを作成するための安価で良い方法は何ですか?インターネットにはいくつかの回路がありますが、どれが優れていますか?
いくつかの標準ツールを使用して、LinuxおよびWindowsからコントローラーをプログラムできるようにしたいと思います。
c - 優れた設計でスタックスペースを確保するには?
RTOSを備えたRAM制限付き組み込みマイクロコントローラー用にCでプログラミングしています。
私は定期的にコードを短い関数に分割していますが、すべての関数呼び出しにはより多くのスタック メモリが必要です。すべてのタスクは自分のスタックを必要とし、これはプロジェクトの重要なメモリ消費者の 1 つです。
コードを適切に整理して読みやすくし、メモリを保持する代替手段はありますか?