私はブートローダとシステムSWの新機能ではありませんが、一般的なプログラムが0x8000
で始まる理由の原因はわかりません。私はすでに、通常のC/C++プログラムでアドレス0x8000
が開始アドレスとして使用されていることを知っています。一般的なプログラムは通常0x8000から始まるのはなぜですか?
一般的なプログラムのブートローダの最小サイズは0x8000
ですか?または、ブートローダ32KBに割り当てる必要のあるROMの最小ブロックサイズは?それとも別の理由がありますか?
これは、歴史的にも論理的にも、仮想アドレスの観点からも知りたいと思います。
あなたの時間と助けに感謝します。 質問をより明確にするために、質問は物理アドレスではなく仮想アドレスと関連しています。
私は基本的に物理メモリのアドレスからRの意見に同意します。
linux(アンドロイドでも)、一般的なRTOS(ニュークリアス、その他、特にARMリンカセクション)などの多様なシステムはありませんが、それらはすべてスタートアドレス汎用プログラムとしてアドレス0x8000を使用します。このエリアにはローダー付きの0x0にあるcrt_begin.o、crt.oなどの名前の が存在します。
したがって、一般的なプログラムのブートローダの最小サイズは、ブート時にBootROMに配置されるブロックサイズ(コールドブート)を考慮すると、ブロックサイズを考慮して32KBです。
うーん、しかし、私はわからない...一般的には
あなたはここでどのようなシステムについて話していますか? –
私はこれのための信頼できる情報源を持っていませんが、私は認定を推測することができます。 特に8ビットのプロセッサでは、[ゼロページ](http://en.wikipedia.org/wiki/Zero_page)という機能がありました。これは、アドレス0x00〜0xFFのメモリセルがより速く実行する。私は6800のような古いMCUにメモリマップされたI/Oレジスタを持っていたので、モトローラがこれを導入したと考えています。 - > – Lundin
したがって、この最初のメモリ領域をRAMセルまたは特殊レジスタ。次に、ゼロ・ページの後に来るアドレス空間の部分は、RAMおよび/またはレジスタと同じ性質であることが理にかなっています。これはたくさんのkbをとるでしょう、多分0x6000かそれ以上のものかもしれません。 私は、ROM(プログラムメモリ)を偶数アドレスに置くと便利であると仮定し、0x8000は便利でした。私はこの疑問に対する答えがモトローラの初期のプロセッサー設計で見つけられることはかなり確信しています。 – Lundin