2017-10-26 5 views
0

な....RAM&ROMメモリ・セグメント

.bssの、の.text、.dataセクション、.rodataの、など異なるメモリ・セグメントは、私はRAMに位置し、それらのかを知ることができなかったとされてきたのがあります彼らはフラッシュメモリに位置し、多くの情報源が(RAM & ROM)メモリの両方のセクションでそれらを言及しています。

RAMとフラッシュのメモリセグメントの正当な説明を提供してください。

ATMELスタジオコンパイラ
ATMEGA 32プラットフォーム

+0

ATMELスタジオコンパイラ ATMEGA 32プラットフォーム –

+0

私はdiffコンパイラまたはプラットフォームを使用している場合、それは何か違いはありますか? –

+3

@MohamedMoustafaはい、大きな違いがあります。一部のプラットフォームでは、ROMをプロセスメモリ空間にマップしない場合があります。 –

答えて

1

プロジェクトのリンカスクリプトが配置されるように、それらを定義するところはどこでも彼らが配置されています。

一部のターゲットはROMにコードを配置して実行しますが、起動時にコードをROMからRAMにコピーし、RAMから実行することがあります。したがって、テキストおよび.rodataは、R/WまたはR/Oメモリに配置することができます。ただし、.bssと.dataは定義上、R/Oメモリに配置することはできません。

+0

thxたくさんのあなたの答えは、この問題を理解し始めました。このトピックをより深く理解するために読むための参考文献やドキュメントはありますか? –

+2

@MohamedMoustafa:リンカ/コンパイラのドキュメントとターゲットプラットフォームのリファレンスマニュアル/データシート。 – Clifford

1

これらのセクション名の一般的な使い方を理解していただければと思います。 .textはコード、.rodataは読み取り専用データ、.dataは非ゼロの読み取り/書き込みデータ(たとえば、コンパイル時に初期化されたグローバル変数)、.bss読み取り/書き込みデータはゼロであるとみなされ、初期化されません。 (初期化されていないグローバル変数)。

.textと.rodataは読み込み専用ですので、フラッシュやラムなどで使用することができます。 .dataと.bssは読み書き可能なのでRAMにUSEDする必要がありますが、その情報をRAMに入れるためには、電源がオフになってからRAMにコピーする必要があります。したがって、マイクロコントローラでは、.data情報はフラッシュで保存され、ブートストラップコードはそのデータをコード内のRAMにコピーする必要があります。 .bssの場合、開始アドレスとバイト数が必要なゼロをすべて必要とせず、ブートストラップはそのメモリをゼロにすることができます。

だから、それらのすべては両方とも共存できる。典型的な使用例は、読取り専用のものがフラッシュでUSEDであり、読取り/書込みがRAMでUSEDであることである。

関連する問題