E ARM (ou mesmo x86) MCU/CPU com estrutura von Neumann, seu espaço de endereço é unificado e contínuo, registros de memória de código/RAM/CPU e até mesmo memória de vídeo para PC são todos abordados uniformemente. É que a memória com diferentes funções ocupa diferentes blocos de endereços, e eles fazem suas próprias coisas.
Vamos voltar ao MCS-51.
Para a memória do programa, há duas partes: on-chip e off-chip. E independentemente da memória do programa on-chip ou da memória do programa off-chip, seus endereços são compartilhados. Se houver 4k ROM no chip, o endereço é 0x0000-0x0FFF, e 0x1000-0xFFFF é o espaço de endereço da ROM externa. Se a parte 0x0000-0x0FFF da ROM externa é usada, depende do valor de nível do pino EA do microcontrolador. Quando eA=1, esta parte da ROM interna é usada, e esta parte da ROM externa é desperdiçada e não utilizada; quando eA=0, esta parte da ROM externa é usada, e a ROM interna é desperdiçada e não utilizada. Para ler os dados do segmento CODE, use a instrução MOVC montada. O microcomputador de chip único determinará automaticamente de qual memória buscar dados de acordo com a instrução MOVC, o status EA e o valor do endereço a ser lido
Para memória de dados, ele é dividido em duas partes: memória de dados interna (IDATA/RAM) e memória de dados externo (XDATA), mas essas duas memórias não compartilham o espaço de endereço como memória de código. O chip 8051 geral, a RAM interna é de apenas 128B, de 0x00-0x7F, e de 0x80-0xFF é a área de SFR (registros de trabalho da CPU e vários registros periféricos estão aqui). Para o 8052, a RAM interna tem 256B, então 0x80-0xFF é a RAM alta de 128B em uso. Mas essa parte não é dedicada à SFR? É dedicado ao SFR, mas note que o acesso ao SFR só pode usar "endereçamento direto" (implementado usando instruções específicas de montagem), a diferença está aqui. Apenas o endereço acessado por endereçamento direto é SFR, caso contrário é RAM comum. Quanto à RAM estendida (XDATA), o endereço também é de 0x0000-0xFFFF, e o 0x0000 aqui é diferente do 0x00 da RAM interna, e eles são completamente independentes de dois espaços. Seus métodos de acesso também são diferentes. O MCS-51 usa instruções MOVX para ler e escrever a área XDATA. Além disso, o acesso à área XDATA requer o atendimento do cadastro da DPTR. Porque apenas o DPTR pode conter o próximo endereço XDATA de 16 bits.
Assim, o MCS-51 tem a velocidade de leitura e escrita mais rápida da área idata e os métodos de maior acesso. A velocidade de acesso à área XDATA é relativamente lenta. A pilha de MCS-51 deve ser desenvolvida primeiro na área idata, e a pilha aberta na área idata pode ser controlada pelo registro de ponteiro de pilha SP. Se a pilha é realmente muito grande e só pode ser aberta na área XDATA, então o registro de SP da CPU será difícil de emprestar, e só podemos construir a estrutura da pilha e empilhar ponteiro sozinhos. Como o espaço de acesso e o espaço de dados do programa externo são 0-64K (0x0000-0xFFFF), então posso realmente salvar programas de reescrita problemáticos/convenientes e outras razões, o CÓDIGO externo e o DATA podem compartilhar uma memória ressutilizável (como vários que a RAM pode ser apagada e gravável). Por exemplo, o sistema tem uma MEMÓRIA externa 64K. O 32K inferior é usado para salvar o CÓDIGO, e o microcontrolador pode ler e executar o programa neste 32K, e o 32K mais alto é usado como o local de armazenamento para dados do usuário. Mas neste momento, o espaço originalmente independente de CÓDIGO e DADOS, porque uma MEMÓRIA é compartilhada no chip de hardware, eles podem afetar uns aos outros, e o programa pode reescrever o programa por si só. Por exemplo, 0x0020 é uma instrução, e eu reescrevo 0x0020 através do MOVX, depois uso MOVC para ler 0x0020, e os dados são diferentes do original.
O cerne da confusão é que o espaço de armazenamento do microcomputador de chip único é um conceito lógico, que são dois espaços separados que são artificialmente divididos. O chip MEMORY no circuito de hardware é um conceito na realidade. O espaço de armazenamento do microcomputador de chip único será eventualmente implementado no chip no nível do circuito, de modo que o espaço de armazenamento lógico se sobreporá devido à conexão do circuito físico. Mas no nível lógico, esses dois espaços ainda são completamente independentes.
Anexo: Definição de vários nomes de espaços de armazenamento:
Dados: consulte fixamente os 128 RAMs de 0x00-0x7f na frente, que podem ser lidos e escritos diretamente por um registro, o código mais rápido e o menor gerado.
Idata: refere-se fixamente aos 256 RAMs de 0x00-0xff na frente, dos quais os primeiros 128 são exatamente os mesmos dos 128 dados, apenas por causa dos diferentes métodos de acesso. idata é acessado usando um ponteiro semelhante ao C. A afirmação na montagem é: mov ACC,@Rx. (suplemento não importante: idata in c tem um bom efeito de acesso ao ponteiro) xdata: RAM estendida externa, geralmente refere-se ao espaço externo 0x0000-0xffff, que é acessado pelo DPTR. pdata: os 256 bytes inferiores da RAM estendida externa, ler e escrever quando o endereço aparecer no A0-A7, usar movx ACC, @Rx para ler e escrever. Isso é muito especial, e C51 parece ter esse bug, é recomendável usar menos. Mas há também suas vantagens. O uso específico é um problema intermediário, não sei como usá-lo, então não vou mencioná-lo aqui.








