タグ付けされた質問 「linker-script」

3
フラッシュとRAM:コード実行
私は最近、アセンブリの学習を開始し、リンカスクリプトおよびハードウェアプログラミングのその他の低レベルの詳細について知るようになりました。また、コンピューターアーキテクチャーについても学んでおり、その過程のどこかで、メモリモデルの私の写真がずっと間違っているのではないかと恐れるようになりました。 私が現在理解していることによると、すべてのコードとデータは、バイナリをプロセッサに「焼き付け」た直後に不揮発性メモリに存在します。揮発性のRAMにはリセット時に何も含まれません。プログラムが「実行」を開始すると、ほとんどの場合(AFAIK)Flashの最下位アドレスであるアドレス0x0000から実行されます。そのため、命令はフラッシュをCPUコアに接続するバスにラッチされ、実際の実行が行われます。ただし、CPUがメモリからデータを取得または保存することについて話すとき、通常はRAMについて話します-プログラムメモリからもデータを読み書きできることを認識しています(これはAVRで行われました)しかし、それはそれほど一般的ではありませんか?RAMがROMよりも高速であるため、そこにデータを保存することを好みますか? この質問に対する受け入れられた答えは、ほとんどのコードがRAMから実行されることを示しています。 これは、スタートアップランタイムコード(それ自体がFlashから実行される)がすべてのプログラムオペコードをFlashからRAMにコピーし、何らかの方法でFlashのアドレスをRAMにマップしてCPUがそこからオペコードをフェッチする必要があることを意味しますか?起動時に.dataセクションをROMからRAMに移動するプロセスに似ていますか? これは、プログラムとデータメモリがバスを共有するフォンノイマンアーキテクチャではより単純であると想像できますが、ハーバードアーキテクチャでは、すべてのコードとデータが最初にCPUレジスタを通過する必要があるということではありませんか? おそらく推測できるように、私はこのビジネス全体に少し混乱しすぎています。常により高い抽象化レベルでプログラミングしてきたので、私はそのような詳細に簡単に困っています。どんな助けも大歓迎です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.