Question

Voici un exemple d'une question donnée sur mon dernier test en cours en génie informatique. esprit Toute personne me expliquant comment obtenir les adresses de début / fin de chaque? J'ai énuméré les bonnes réponses au fond ...

Le dispositif de MSP430F2410 a un espace d'adresse de 64 Ko (l'architecture MSP430 de base). Remplissez le tableau ci-dessous si nous savons ce qui suit. Les 16 premiers octets de l'espace d'adressage (en commençant à l'adresse 0x0000) est réservé pour des registres de fonction spéciale (IE1, IE2, IFG1, IFG2, etc.), les 240 octets suivants sont réservés pour les périphériques de 8 bits, et la prochaine 256 octets est réservée aux dispositifs périphériques 16 bits. La capacité de mémoire RAM est de 2 kilo-octets et il commence à l'0x1100 adresse. En haut de l'espace d'adressage est 56Ko de mémoire flash réservée pour le code et l'interruption de la table vecteur.

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
Était-ce utile?

La solution

Pour commencer, ne sont pas jetés hors de ce qui est stocké dans chaque segment - qui va seulement vous embrouiller. Le problème vous demande simplement de comprendre la numérotation hexadécimal, et ce n'est pas trop difficile. Voici les exigences:

  • 64 Ko de mémoire totale
  • Les premiers 16 octets de l'espace d'adressage (en commençant à la 0x0000 d'adresse) est réservé pour des registres de fonction spéciale (IE1, IE2, IFG1, IFG2, etc.)
  • La prochaine 240 octets est réservé pour des dispositifs périphériques 8 bits
  • La prochaine 256 octets est réservé pour des dispositifs périphériques 16 bits
  • La capacité de mémoire RAM est 2 kilo-octets et il commence à l'0x1100 adresse
  • En haut de l'espace d'adressage est 56KB de mémoire flash réservé pour le code et l'interruption de la table vecteur.

Étant donné que chaque chiffre hexadécimal dans votre adresse mémoire peut gérer 16 valeurs (0-F), vous aurez besoin de 4 chiffres pour afficher 64Ko de mémoire (16 ^ 4 = 65536, ou 64K).

Vous commencez avec 16 octets, et qui couvre 0x0000 - 0x000F (un chiffre complet de votre adresse). Cela veut dire que le segment suivant, qui commence immédiatement après (dispositifs à 8 bits), commence à 0x0010 (l'octet suivant), et comme il est de 240 octets de long, il se termine à l'octet 256 (240 + 16), ou 0x00FF.

Le segment suivant (dispositifs 16 bits) à partir de l'octet suivant, ce qui est 0x0100, et est de 256 octets de long. - qui met fin à 0x01FF

Vient ensuite 2 Ko (2048 octets) de RAM, mais il commence à 0x1100, comme l'indique la description, au lieu immédiatement après le segment précédent, de sorte que est votre adresse de départ. Ajouter à 2048, et vous obtenez 0x18FF.

Le dernier segment couvre la partie supérieure de la mémoire, de sorte que vous devrez travailler en arrière, vous savez qu'il se termine à 0xFFFF (la fin de la mémoire disponible), et il est 56KB longtemps. Si vous convertissez le 56Ko à six pans, il est 0xDFFF. Si vous imaginez que ce segment commence à 0, qui laisse 2000 utilisé (0xE000-0xEFFF et 0xF000-0xFFFF), afin que vous sachiez que ce segment doit commencer à 0x2000 mettre fin à l'extrémité supérieure de l'espace mémoire.

J'espère que ce plus clair, mais quand je l'ai lu dessus, je ne sais pas que ce soit une aide du tout :( Peut-être que la raison pour laquelle je vais laisser enseigner ce concept à quelqu'un plus qualifié ...

Autres conseils

#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];
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top