-1

私が知っているように、定数値、変数の初期化されたデータは、組み込みシステムのコンパイラによって ROM (Read Only Momory) に配置されます。しかし、ROMは読み取り専用です。つまり、書き込みできないため、プログラミング時にコンパイラーがこれらのデータをどのように書き込むことができますか?

この組み込みシステムの場合の ROM は、主に EEPROM またはフラッシュ メモリの書き込み許可の意味だと思います。

OS を使用する組み込みシステムと OS を使用しない組み込みシステムの両方で、私の理解は正しいですか?

4

2 に答える 2

1

「読み取り専用」の部分は、一般的な書き込み可能性よりもフィールド プログラミング可能性に関するものです。ROMには大きく分けて次の3種類があります。

  • マスクROMなど、製造工程でプログラムされ内容を変更できないもの。
  • UVライトで消去できるEPROMなど、特殊な機器で消去できる種類。
  • EEPROMなどの電気的に(通常は回路内で)消去できる種類。
  • また、フラッシュと EEPROM の違いについて @Olaf が残した有益なコメントも参照してください (確かに、私が思っていたよりも大きいです!)

Atmel の人気のATmega シリーズなど、最近の多くのマイクロコントローラーには、プログラム ストレージ用のオンチップ フラッシュ メモリが含まれており、不揮発性データ ストレージ用の EEPROM も含まれている場合があります。これらのメモリは、ハードウェア固有のデバイス プログラマによって書き込まれます。

正しいデータまたはコードが正しいタイプのメモリに確実に配置されるようにすることは、コンパイラ、リンカ、およびデバイス プログラマの共同責任です。たとえば、コンパイラは、.textセクションに実行可能コードを配置するアセンブリ ディレクティブを発行する可能性があります。.textリンカーは、プログラムを構成するオブジェクト ファイルのセクションを結合します。最後に、結合されたデータ.textがデバイスのフラッシュ メモリに書き込まれます。

デバイス プログラマーは、明らかに、実行可能ファイルの形式と、セクション名からメモリ タイプへのマッピングについてある程度理解している必要があります。または、中間ツールを使用して、実行可能ファイルをプログラマーの入力ファイルに変換することもできます。

于 2015-08-19T14:14:10.110 に答える
0

しかし、ROMは読み取り専用です。つまり、書き込みできないため、プログラミング時にコンパイラーがこれらのデータをどのように書き込むことができますか?

この質問に答えるために、コンパイラは単にオブジェクト ファイルを作成します。

これらはリンカに渡され、リンカは、通常、何らかのリンカ スクリプトを読み取ることによって、変数が最終的にどの物理アドレスに到達するかを決定します。リンカ スクリプトは、「プログラム コードはフラッシュ セクション 1 に入り、文字列リテラルはフラッシュ セクション 2 に入り、const 変数はフラッシュ セクション 3 に入ります」のように言うかもしれません。リンカーは、いくつかのバイナリ ファイル形式を作成します。

バイナリは、フラッシュをプログラミングするための実際のルーチンを含むチップ プログラマ ツールまたはインサーキット デバッガに渡されます。

于 2015-08-19T14:39:04.767 に答える