問題タブ [bare-metal]
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.
embedded - ベアメタルシステムのソフトウェアテスト
OSをサポートしていない組み込みシステム用のプロジェクトをC++で書いています。ライブラリのサポートはほとんどありません。非常にベアメタル。したがって、かなりの量のコードが緊密に結合されています(たとえば、ソフトウェアによってトリガーされる割り込みとそのすぐ上のレイヤー)。
私が行っていることの一部には、シリアルポート構成の変更が含まれます。これにより、PC側(UI側)とマイクロプロセッサー(アクティビティ側)で同時に変更が行われます。私はこれまでのところ、非常に注意深いインクリメンタルタイプの開発(ピースごとにそれをはめ込む)で大丈夫です。ただし、エンジニアリングの意味でコードが機能することについて、より自信を持ってやりたいと思います。
このような状況では、どのような方法論/フレームワークをお勧めしますか?
編集:
Tern、Inc.製のACore86ボードでAMD186 ESを使用しています。コンパイラ:パラダイム、無料版(ボードに同梱)。残念ながら、作業内容を変更するオプションはありません。
c - x86ベアメタルアセンブリでキーボード入力を取得するには?
私は、カーネルの最初のビットを一緒にハックしようとしているところです。私は現在、カーネル全体を C コードとしてコンパイルしており、コンソール ウィンドウにテキストを表示することができました。ここで、キーボード入力の受け入れを開始して、実際に使用してプロセス管理を開始できるようにします。
DJGPP を使用してコンパイルし、GRUB をロードしています。また、基本的にコンパイル済みの C コードに直接ジャンプする小さなアセンブリも使用しており、そこから満足しています。
私が行ったすべての調査では、$0x16 の ISR がキーボード バッファーから次の文字を読み取ることを示しているようです。私が知る限り、これは ASCII 値を ah に格納し、キーコードを al に格納するか、その効果を発揮するものです。インライン アセンブリで次のルーチンを使用して、これをコーディングしようとしています。
このコードが呼び出されると、コアはすぐにクラッシュします。(私は VirtualBox で実行していますが、実際のハードウェアでこの基本的なことを試す必要はないと感じました。)
今、私は実際にいくつかの質問があります。(私のコードは GRUB から起動されたので) 現在、私がリアル モードで実行しているかプロテクト モードで実行しているかは、誰も教えてくれませんでした。プロセス ハンドラをセットアップするまでは、リアル モードで実行する予定でした。
では、リアル モードで実行していると仮定すると、何が間違っているのでしょうか。また、どのように修正すればよいでしょうか。基本的な getc ルーチン、できればノンブロッキングが必要なだけですが、Google がこれを手伝ってくれているとしたら、私はうんざりします。それができたら、そこから残りを行うことができます。
私がここで尋ねているのは、私は正しい道の近くにいるのでしょうか? 一般的に、このレベルでキーボード入力を取得するにはどうすればよいでしょうか?
編集:ああ...私は保護モードで実行しています。これは確かに、リアルモード機能にアクセスしようとしてクラッシュしたことを説明しています.
それで、プロテクトモードからキーボードIOにアクセスする方法を探していると思います。自分で見つけられるかもしれませんが、もしご存知の方がいらっしゃいましたらよろしくお願いします。再度、感謝します。
c - OSなしで実行
OSなしでRAMから直接実行できるように、 Cプログラムを有効なELF形式(またはRAW形式)にコンパイルするにはどうすればよいですか? RAM の任意の場所にコードをロードし、そのアドレスで実行を開始できるブートローダーが存在すると仮定します。正確には、コンパイラ( GCC )フラグは何ですか? マップファイルは必要ですか?
サンプルの helloworld アプリケーションは大歓迎です :)
私の要点を詳しく説明するために
、main() メソッドを空の無限 while ループにして、OS固有または標準のライブラリ呼び出しが使用されないようにします。目的の o/p はハングです。通常のGCCオプションを使用すると、ブートローダーは実行可能ファイルのロードに確実に失敗し、無効なELF形式であることが通知されます。ただし、リンカーに-dNオプションを渡すと、有効なELFになります。クラッシュせずにハングアップさせるには、より多くのコンパイラ/リンカーオプションが必要です!! これらのコンパイラ オプションとは正確には何ですか?
コンパイル
gcc -c -nostdinc -fno-builtin
file.c ld -dN -nostdlib file.o
ブートローダーはa.outを RAM にロードして実行します。
hardware - 平均的な開発者は、ベアメタルについてどの程度知っておくべきでしょうか?
先日、自分のソフトウェアが実行されるハードウェアについてほとんど何も知らないことに気がつきました。私は約 5 年間開発者をしていますが、大学を卒業して以来、ハードウェアの理論や設計について調べていません。私はもはや自分のマシンを構築することさえしません。なぜなら、残忍な正直なところ、余分な数ドルを支払って、Comp Sci ドロップアウトにショップで構築してもらいたいからです。
ボンネットの下で何が起こっているかの基本をよく理解することは明らかに重要ですが、それは開発者として私たちから遠く離れて抽象化されているため、複雑なことに気を配る必要はありませProgrammed I/O
んMemory-Mapped I/O
..
それとも私たちですか?
ここでは、専任のベアメタル担当者ではなく、毎日の LOB 開発者について話していることに注意してください。
それでは、「平均」をどのように定義しますか?しかし、全体として、有能なプログラマーはどれくらい深く潜ることができるのでしょうか?
opencv - OpenCV からの関数の移植
OpenCV ライブラリからいくつかの関数を組み込みアプリケーションにコピーしたいと考えています。標準のデータ構造を使用するようにそれらを書き直すのは非常に面倒なので、次のことを試しました。
ヘッダーの欠落エラーは発生しませんでしたが、多くのエラーが発生しました
エラー: 数値定数の前に unqualified-id が必要です
次のような行の場合
エラー: 単項「&」の左辺値が無効です</p>
次のような行の場合
ここで、_U、_V などは以前に CvMAt 変数として定義されています (CvMat が定義されていないというコンパイラ エラーは発生しませんでした)。
私は bfin-elf-g++ (GCC) 4.1.2 (ADI svn) を使用していますが、現在私の実装はベア メタルです。つまり、オペレーティング システムはありません。
何かアドバイス?パッケージ全体ではなく、このファイルのいくつかの機能にのみ関心があります。
assembly - DOSからのMBRブート
プロジェクトの場合、DOSから直接最初のハードディスクでMBRを呼び出したいと思います。私は0:7c00hにメモリにMBRをロードし、それにはるかにジャンプする小さなアセンブラプログラムを作成しました。utilを(DOS)起動可能なフロッピーに入れました。起動しようとしているディスク(HD0、0x80)には、TrueCryptブートローダーがあります。この設定でツールを実行すると、TrueCrypt画面が表示されますが、パスワードを入力するとシステムがクラッシュします。通常のWinXPマシンで小さなユーティリティ(w00t.com)を実行すると、すぐにクラッシュするようです。
どうやら私はBIOSが通常行ういくつかの重要なことを忘れているようです、私の推測ではそれは些細なことです。ベアメタルDOSとBIOSの経験が豊富な人が私を助けてくれますか?
これが私のコードです:
bootloader - 最低限のオペレーティング システムで単一のタスクを実行する
x86で単一のファイルを読み取り、単一のファイルに書き込むことができる、最低限の骨の折れるオペレーティングシステム用に、Linuxからansicプログラムをクロスコンパイルしたいと思います。次に、その裸のOSを再起動して、その単一のプログラムを実行したいと思います。私の選択は何ですか?
embedded - OSなしのTCP/IPプロトコルスタック
OSなしで使えるTCP/IPスタックを探しています。私たちの顧客は割り込みに「嫌悪感」を持っており、私たちが構築している組み込みボード上に実際の OS を望んでいません。50 ~ 100 MHz の Arm しか使用しないため、できるだけ多くの機能を FPGA に移行することが望ましいです。そして、GPL ライセンスのものは、このクライアントには受け入れられないと確信しています。(それに関連する法的な泥沼のため。彼らは、ソフトウェアが完成したら、ソフトウェアに対する完全な無制限の権利を期待しています。)
shared-libraries - ベアメタルアームアプリケーション用のダイナミックローダーの書き方
私はarm9プロセッサに基づくプロジェクトに取り組んでいます。オペレーティングシステムなしでベアメタルのみを使用しているため、残念ながら、共有ライブラリ/ダイナミックローダーはまだサポートされていません。
メインアプリケーションから関数を呼び出すこともできるSDカードなどからライブラリをロードできるようにしたいと思います。
私の最初の試みはリンカーオーバーレイ機能(特定の絶対位置のセクションにライブラリを配置する)を使用することでしたが、前述のようにメインアプリ関数を呼び出す際の問題があります->メインアプリケーションを変更するたびに、ライブラリを再コンパイルする必要がありますコールバックできるようにします。
これによると、私は自分のダイナミックローダーを作成する必要があると思いますが、私はこの分野の初心者です。誰かが私にそれをどのように扱うか、またはそのようなプロジェクトを始める方法の例を教えてもらえますか?arm-elfターゲットにはgccを使用しています。
Janに関して
oop - ベアメタル上のオブジェクト指向言語
私はC++とObjectPascalを知っていますが、現在コンパイラーがオペレーティングシステムのないマシンで実行するためにそれらをコンパイルできる他のオブジェクト指向言語はありますか?ある場合、彼らはかなりのコミュニティと許容できるほど良いドキュメントを持っていますか?