Ricerca sullo sviluppo e l'applicazione di dispositivi elettronici di potenza e tecnologia di conversione di frequenza

Jun 09, 2021

Lasciate un messaggio

E MCU/CPU ARM (o anche x86) con struttura von Neumann, il suo spazio di indirizzamento è unificato e continuo, i registri di memoria di codice/RAM/CPU e persino la memoria video del PC sono tutti indirizzati in modo uniforme. È solo che la memoria con funzioni diverse occupa blocchi di indirizzi diversi e fanno le loro cose.


Ok, lascia che i' tornino a MCS-51.


Per la memoria del programma, ci sono due parti: on-chip e off-chip. E indipendentemente dalla memoria del programma on-chip o dalla memoria del programma off-chip, i loro indirizzi sono condivisi. Se sul chip è presente una ROM da 4k, l'indirizzo è 0x0000-0x0FFF e 0x1000-0xFFFF è lo spazio degli indirizzi della ROM esterna. Se viene utilizzata la parte 0x0000-0x0FFF della ROM esterna, dipende dal valore del livello del pin EA del microcontrollore. Quando EA=1, viene utilizzata questa parte della ROM interna e questa parte della ROM esterna viene sprecata e non utilizzata; quando EA=0, viene utilizzata questa parte della ROM esterna e la ROM interna viene sprecata e non utilizzata. Per leggere i dati dal segmento CODE, utilizzare l'istruzione MOVC assemblata. Il microcomputer a chip singolo determinerà automaticamente da quale memoria recuperare i dati in base all'istruzione MOVC, allo stato EA e al valore dell'indirizzo da leggere


Per la memoria dati, è divisa in due parti: memoria dati interna (IDATA/RAM) e memoria dati esterna (XDATA), ma queste due memorie non condividono lo spazio degli indirizzi come la memoria del codice. Il chip 8051 generale, la RAM interna è solo 128B, da 0x00-0x7F e da 0x80-0xFF è l'area di SFR (i registri di lavoro della CPU e vari registri periferici sono qui). Per l'8052, la RAM interna ha 256B, quindi 0x80-0xFF è la RAM alta 128B in uso. Ma'questa parte non è dedicata a SFR?'è dedicato a SFR, ma nota che l'accesso SFR può utilizzare solo"indirizzamento diretto" (implementato tramite specifiche istruzioni di montaggio), la differenza sta qui. Solo l'indirizzo a cui si accede tramite indirizzamento diretto è SFR, altrimenti è RAM ordinaria. Per quanto riguarda la RAM estesa (XDATA), anche l'indirizzo è 0x0000-0xFFFF, e lo 0x0000 qui è diverso dallo 0x00 della RAM interna e sono completamente indipendenti da due spazi. Anche i loro metodi di accesso sono diversi. MCS-51 utilizza l'istruzione MOVX per leggere e scrivere l'area XDATA. Inoltre, l'accesso all'area XDATA richiede l'assistenza del registro DPTR. Perché solo DPTR può contenere il successivo indirizzo XDATA a 16 bit.


Quindi, MCS-51 ha la velocità di lettura e scrittura più veloce dell'area IDATA e il maggior numero di metodi di accesso. La velocità di accesso all'area XDATA è relativamente lenta. Lo stack di MCS-51 dovrebbe essere sviluppato prima nell'area IDATA e lo stack aperto nell'area IDATA può essere controllato dal registro del puntatore dello stack SP. Se lo stack è davvero troppo grande e può essere aperto solo nell'area XDATA, sarà difficile prendere in prestito il registro SP della CPU e possiamo solo costruire la struttura dello stack e il puntatore dello stack da soli. Poiché lo spazio del programma esterno e lo spazio dei dati sono entrambi 0-64K (0x0000-0xFFFF), quindi posso effettivamente salvare problemi / programmi di riscrittura convenienti e altri motivi, il CODICE e i DATI esterni possono condividere una memoria riscrivibile (come vari What RAM può essere cancellato e scrivibile). Ad esempio, il sistema dispone di una MEMORIA esterna da 64K. Il 32K inferiore viene utilizzato per salvare il CODICE e il microcontrollore può leggere ed eseguire il programma in questo 32K e il 32K superiore viene utilizzato come luogo di archiviazione per i dati dell'utente. Ma in questo momento, lo spazio CODE e DATA originariamente completamente indipendente, poiché una MEMORIA è condivisa sul chip hardware, possono influenzarsi a vicenda e il programma può riscrivere il programma da solo. Ad esempio, 0x0020 è un'istruzione e riscrivo 0x0020 tramite MOVX, quindi utilizzo MOVC per leggere 0x0020 e i dati sono diversi dall'originale.


Il punto cruciale della confusione è che lo spazio di archiviazione del microcomputer a chip singolo è un concetto logico, ovvero due spazi separati che sono divisi artificialmente. Il chip MEMORY sul circuito hardware è un concetto in realtà. Lo spazio di archiviazione del microcomputer a chip singolo verrà eventualmente implementato sul chip a livello di circuito, quindi lo spazio di archiviazione logico si sovrapporrà a causa della connessione del circuito fisico. Ma a livello logico, questi due spazi sono ancora completamente indipendenti.


Allegato: definizione di vari nomi di spazio di archiviazione:


Dati: si riferiscono in modo fisso alle 128 RAM di 0x00-0x7f nella parte anteriore, che possono essere lette e scritte direttamente da un registro, il codice più veloce e il più piccolo generato.


Idata: si riferisce in modo fisso alle 256 RAM di 0x00-0xff nella parte anteriore, di cui la prima 128 è esattamente uguale alla 128 di dati, proprio per via delle diverse modalità di accesso. Si accede a idata utilizzando un puntatore simile a C. L'istruzione nell'assembly è: mov ACC,@Rx. (supplemento non importante: idata in c ha un buon effetto di accesso al puntatore) xdata: RAM estesa esterna, generalmente si riferisce allo spazio esterno 0x0000-0xffff, a cui si accede da DPTR. pdata: i 256 byte inferiori della RAM estesa esterna, leggi e scrivi quando l'indirizzo appare su A0-A7, usa movx ACC, @Rx per leggere e scrivere. Questo è abbastanza speciale e C51 sembra avere questo bug, si consiglia di usarne di meno. Ma ci sono anche i suoi vantaggi. L'utilizzo specifico è un problema intermedio, non so come usarlo, quindi ho vinto'non lo cito qui.