Pregunta

A continuación se muestra un ejemplo de una pregunta dada en mi última prueba en un curso de Ingeniería Informática. Cualquier persona mente explicar a mí cómo obtener las direcciones de inicio / final de cada uno? He enumerado las respuestas correctas en la parte inferior ...

El dispositivo MSP430F2410 tiene un espacio de direcciones de 64 KB (la arquitectura básica MSP430). Complete la tabla a continuación si sabemos lo siguiente. Los primeros 16 bytes de espacio de direcciones (a partir de la dirección de 0x0000) se reserva para registros de funciones especiales (IE1, IE2, IFG1, IFG2, etc.), los siguientes 240 bytes se reserva para los 8 bits dispositivos periféricos, y el siguiente 256 bytes se reserva para los dispositivos periféricos de 16 bits. La capacidad de la memoria RAM es de 2 Kbytes y se inicia en la dirección 0x1100. En la parte superior del espacio de direcciones es 56KB de memoria flash reservado para el código y tabla de vectores de interrupción.

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
¿Fue útil?

Solución

Para empezar, no ser expulsado por lo que se almacena en cada segmento - que sólo va a confundir. El problema está pidiendo usted para averiguar la numeración hexadecimal, y que no es demasiado difícil. Estos son los requisitos:

  • memoria total 64 KB
  • El primero 16 bytes del espacio de direcciones (a partir de la dirección de 0x0000) está reservado para los registros de funciones especiales (IE1, IE2, IFG1, IFG2, etc.)
  • La siguiente 240 bytes está reservado para los 8 bits dispositivos periféricos
  • La siguiente 256 bytes está reservado para los 16 bits dispositivos periféricos
  • La capacidad de la memoria RAM es 2 Kbytes y se inicia en la dirección 0x1100
  • En la parte superior del espacio de direcciones es 56KB de la memoria flash reservado para el código y tabla de vectores de interrupción.

Debido a que cada dígito hexadecimal en su dirección de memoria puede gestionar 16 valores (0-F), necesitará 4 dígitos para indicar 64KB de memoria (16 ^ 4 = 65536, o 64K).

Se comienza con 16 bytes, y que cubre 0x0000 - 0x000F (un dígito de su dirección completa). Esto significa que el siguiente segmento, que comienza inmediatamente después de que (dispositivos de 8 bits), comienza a 0x0010 (el siguiente byte), y puesto que es de 240 bytes de largo, que termina en byte 256 (240 + 16), o 0x00FF.

El siguiente segmento (dispositivos de 16 bits) se inicia en el siguiente byte, que es 0x0100, y es de 256 bytes de longitud -. Que pone el extremo en el 0x01FF

Luego viene 2 KB (2048 bytes) de memoria RAM, pero comienza a 0x1100, como la descripción estados, en lugar de inmediatamente después del segmento anterior, por lo que de su dirección de partida. Añadir 2048 a eso, y se obtiene 0x18FF.

El último segmento cubre la parte superior de la memoria, por lo que tendrá que revés de trabajo, Usted sabe que termina a 0xFFFF (al final de la memoria disponible), y es de 56KB larga. Si convierte la 56KB en hexadecimal, que es 0xDFFF. Si se imagina que este segmento comienza en 0, que deja a 2000 sin usar (0xE000-0xEFFF y 0xF000-0xFFFF), por lo que saber que este segmento tiene que empezar en 0x2000 para terminar en el extremo superior del espacio de memoria.

Espero que sea más claro, sin embargo, cuando leí sobre él, no sé que le sirve de ayuda en absoluto :( Tal vez por eso voy a dejar la enseñanza de ese concepto a alguien más calificado ...

Otros consejos

#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];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top