Domanda

Di seguito è riportato un esempio di una domanda dato il mio ultimo test in un corso di Ingegneria Informatica. Chiunque mente spiegare a me come per ottenere gli indirizzi di inizio / fine di ciascuno? Ho elencato le risposte corrette in fondo ...

Il dispositivo MSP430F2410 ha uno spazio di indirizzi di 64 KB (l'architettura di base MSP430). Compilare la tabella qui sotto se sappiamo quanto segue. I primi 16 byte dello spazio di indirizzi (a partire dall'indirizzo 0x0000) è riservata per i registri di funzioni speciali (IE1, IE2, IFG1, IFG2, ecc), i successivi 240 byte è riservato per 8-bit dispositivi periferici e il successivo 256 byte riservati per periferiche a 16 bit. La capacità di memoria RAM è 2 Kbyte ed inizia dall'indirizzo 0x1100. Nella parte superiore dello spazio di indirizzamento è 56KB di memoria flash riservato per il codice e la tabella vettore di interruzione.

What                            Start Address End Address
Special Function Registers (16 bytes) 0x0000 0x000F
8-bit peripheral devices (240 bytes)  0x0010 0x00FF
16-bit peripheral devices (256 bytes) 0x0100 0x01FF
RAM memory (2 Kbytes)                 0x1100 0x18FF
Flash Memory (56 Kbytes)              0x2000  0xFFFF
È stato utile?

Soluzione

Per cominciare, non si ottiene gettato fuori da ciò che è memorizzato in ogni segmento - che sta solo andando a confondere voi. Il problema è solo chiedendo di capire la numerazione esadecimale, e che non è troppo difficile. Ecco i requisiti:

  • 64 KB memoria totale
  • Il primo 16 byte dello spazio degli indirizzi (a partire dall'indirizzo 0x0000) è riservato per i registri di funzioni speciali (IE1, IE2, IFG1, IFG2, ecc.)
  • Il prossimo 240 byte è riservata a 8-bit delle periferiche
  • Il seguente 256 bytes è riservata a 16 bit periferiche
  • La capacità di memoria RAM è di 2 Kbyte e inizia all'indirizzo 0x1100
  • Nella parte superiore dello spazio di indirizzamento è 56KB di memoria flash riservato per il codice e la tabella vettore di interruzione.

Dal momento che ogni cifra esadecimale nel vostro indirizzo di memoria in grado di gestire 16 valori (0-F), avrete bisogno di 4 cifre da visualizzare 64 KB di memoria (16 ^ 4 = 65536, o 64K).

Si inizia con 16 byte, e che copre 0x0000 - 0x000F (una cifra totale del vostro indirizzo). Ciò significa che il segmento successivo, che inizia immediatamente dopo (dispositivi 8 bit), comincia a 0x0010 (prossimo byte), e poiché è lungo 240 byte, termina a byte 256 (240 + 16), o 0x00FF.

Il segmento successivo (dispositivi a 16-bit) inizia il successivo byte, che è 0x0100, ed è lunga 256 byte -. Che mette l'estremità a 0x01FF

Poi arriva 2KB (2048 byte) di RAM, ma inizia a 0x1100, come la descrizione stati, invece che subito dopo il segmento precedente, in modo che il vostro indirizzo di partenza. Aggiungere 2048 a quella, e si ottiene 0x18FF.

L'ultimo segmento copre la parte superiore della memoria, in modo da dovrete all'indietro di lavoro, Sai che termina a 0xFFFF (alla fine della memoria disponibile), e il tempo di 56KB. Se si converte il 56KB in esadecimale, è 0xDFFF. Se si immagina che questo segmento parte da 0, che lascia inutilizzato 2000 (0xE000-0xEFFF e 0xF000-0xFFFF), in modo da sapere che questo segmento deve cominciare a 0x2000 per porre fine al limite superiore dello spazio di memoria.

Spero che sia più chiaro, anche se quando ho letto su di esso, non so che si tratta di alcun aiuto a tutti :( Forse è per questo che lascio insegnare questo concetto a qualcuno più qualificato ...

Altri suggerimenti

#define NUM_SIZES 5
uint16_t sizes[5] = {16, 240, 256, 2 * 1024, 56 * 1024};
uint16_t address = 0;
printf("Start   End\n");
for (int i = 0; i < NUM_SIZES; i++)
{
    printf("0x%04X 0x%04X\n", address, address + sizes[i] - 1);
    address += sizes[i];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top