パワーエレクトロニクスデバイスと周波数変換技術の開発と応用に関する研究

Jun 09, 2021

伝言を残す

そして、フォン ノイマン構造を備えた ARM (または x86) MCU/CPU、そのアドレス空間は統一され、連続的であり、コード メモリ/RAM/CPU レジスタ、さらには PC ビデオ メモリでさえ、すべて均一にアドレス指定されます。' さまざまな機能を備えたメモリがさまざまなアドレス ブロックを占有し、独自の処理を実行するというだけです。


さて、GG #39; を MCS-51 に戻そう。


プログラム メモリには、オンチップとオフチップの 2 つの部分があります。 また、オンチップ・プログラム・メモリ、オフチップ・プログラム・メモリに関係なく、アドレスは共有されます。 4k ROM が内蔵されている場合、アドレスは 0x0000-0x0FFF であり、0x1000-0xFFFF は外部 ROM のアドレス空間です。 外部 ROM の 0x0000-0x0FFF 部分を使用するかどうかは、マイクロコントローラの EA ピンのレベル値に依存します。 EA=1 の場合、内部 ROM のこの部分が使用され、外部 ROM のこの部分が無駄になり、使用されなくなります。 EA=0 の場合、外部 ROM のこの部分が使用され、内部 ROM は無駄になり使用されません。 CODE セグメントからデータを読み取るには、アセンブルされた MOVC 命令を使用します。 シングルチップマイコンは、MOVC命令、EAの状態、読み出すアドレス値に応じて、どのメモリからデータをフェッチするかを自動的に決定します。


データ メモリは、内部データ メモリ (IDATA/RAM) と外部データ メモリ (XDATA) の 2 つの部分に分かれていますが、これら 2 つのメモリはコード メモリのようにアドレス空間を共有しません。 一般的な 8051 チップ、内部 RAM は 0x00-0x7F の 128B のみで、0x80-0xFF は SFR の領域です (CPU ワーキング レジスタと各種周辺レジスタはここにあります)。 8052 の場合、内部 RAM には 256B があるため、0x80-0xFF が使用中の高 128B RAM です。 しかし、GG #39; この部分は SFR 専用ではありませんか? これは' SFR 専用ですが、SFR アクセスは"直接アドレス指定" のみを使用できることに注意してください。 (特定のアセンブリ命令を使用して実装)、違いはここにあります。 直接アドレッシングでアクセスするアドレスは SFR のみで、それ以外は通常の RAM です。 拡張RAM(XDATA)もアドレスが0x0000~0xFFFFで、ここの0x0000は内蔵RAMの0x00とは異なり、2つの空間に完全に独立しています。 アクセス方法も異なります。 MCS-51 は、MOVX 命令を使用して XDATA 領域を読み書きします。 また、XDATA 領域へのアクセスには、DPTR レジスタの支援が必要です。 DPTR だけが次の 16 ビット XDATA アドレスを保持できるためです。


したがって、MCS-51 は IDATA 領域の読み取りと書き込みの速度が最も速く、アクセス方法が最も多いです。 XDATA 領域へのアクセス速度は比較的遅いです。 MCS-51 のスタックは、最初に IDATA 領域に展開する必要があり、IDATA 領域に開かれたスタックは、スタックポインタレジスタ SP で制御できます。 スタックが大きすぎてXDATA領域しか開けないとCPUのSPレジスタが借りられなくなり、スタック構造とスタックポインタを自分で構築するしかありません。 外部プログラム空間とデータ空間はともに0-64K(0x0000-0xFFFF)なので、実際に面倒な書き換えプログラムなどを省くことができ、外部のCODEとDATAは書き換え可能なメモリを共有することができます(各種RAMは消去および書き込み可能)。 たとえば、システムには 64K の外部メモリがあります。 下位 32K は CODE の保存に使用され、マイクロコントローラーはこの 32K でプログラムを読み取って実行でき、上位 32K はユーザー データの保存場所として使用されます。 しかし、この時、元々完全に独立したCODEとDATAの空間は、ハードウェアチップ上でMEMORYを共有しているため、お互いに影響し合い、プログラム自体がプログラムを書き換えることができます。 例えば0x0020は命令ですが、MOVXで0x0020を書き換えてからMOVCで0x0020を読み出したのですが、元のデータとは違います。


混乱の核心は、シングルチップ マイクロコンピュータのストレージ スペースが論理的な概念であり、人為的に分割された 2 つの別個のスペースであるということです。 ハードウェア回路上のMEMORYチップは、実際のコンセプトです。 シングルチップマイクロコンピュータの記憶空間は、最終的に回路レベルでチップ上に実装されるため、物理的な回路接続により論理的な記憶空間が重複します。 しかし、論理レベルでは、これら 2 つのスペースは依然として完全に独立しています。


添付ファイル: さまざまなストレージ スペース名の定義:


データ: 0x00-0x7f の 128 個の RAM を前方に固定的に参照します。これは、レジスタによって直接読み書きでき、生成されたコードが最も速くて最小です。


Idata: 0x00-0xff の 256 個の RAM を先頭に固定して参照し、最初の 128 個はデータの 128 個とまったく同じですが、アクセス方法が異なるだけです。 idata には、C と同様のポインターを使用してアクセスします。アセンブリ内のステートメントは、mov ACC,@Rx です。 (重要な補足ではありません: c の idata には優れたポインタ アクセス効果があります) xdata: 外部拡張 RAM は、通常、DPTR によってアクセスされる外部 0x0000-0xffff スペースを指します。 pdata: 外部拡張 RAM の下位 256 バイト、アドレスが A0 ~ A7 に表示されたときに読み取りおよび書き込み、movx ACC、@Rx を使用して読み取りおよび書き込みを行います。 これはかなり特殊で、C51 にはこのバグがあるようです。使用量を減らすことをお勧めします。 しかし、彼の利点もあります。 特定の使用法は中間の問題です。私は' の使用方法がわからないので、GG #39 に勝ちました; ここでは言及しません。