0
votes

Interaction ou affectation de la variable de structure à l'emplacement de la mémoire

Veuillez expliquer l'extrait de code suivant du fichier d'en-tête de microcontrôleur et la manière dont la variable de structure attribue à un emplacement de mémoire particulier indiqué dans le code (I.E. 0x40000000 + 0x04000 = 0x40004000). Et comment la programmeuse d'application peut accéder aux membres de la structure et l'écrire indiquée dans la structure (I.e. IR, TCR, TC, PR, PC et MCR).

/*------------- Timer (TIM) --------------------------------------------------*/
typedef struct
{
  __IO uint32_t IR; /* __IO is volatile read and write */
  __IO uint32_t TCR;
  __IO uint32_t TC;
  __IO uint32_t PR;
  __IO uint32_t PC;
  __IO uint32_t MCR;
} LPC_TIM_TypeDef;

#define LPC_APB0_BASE         (0x40000000UL)
#define LPC_TIM0_BASE         (LPC_APB0_BASE + 0x04000)
#define LPC_TIM0              ((LPC_TIM_TypeDef *) LPC_TIM0_BASE)


1 commentaires

C'est élémentaire C quelle partie de cela est déroutant? S'il vous plaît élaborer.


3 Réponses :


2
votes

Comme vous l'avez correctement indiqué, le LPC_APB0_BASE et macros LPC_TIM0_BASE LPC_TIM0_BASE, définissez l'adresse de l'endroit où les données de (probablement) sont situées. Le macro lpc_tim0 est évalué à un pointeur à un lpc_tim_typef structure à cet emplacement.

Ainsi, afin d'accéder aux membres de cette structure, Vous pouvez utiliser l'opérateur -> sur lpc_tim0 ; Par exemple, pour définir le membre tc , utilisez le code comme celui-ci: xxx

pour lire les données à partir du membre PC , utilisez ceci: xxx

frais libres de demander des éclaircissements et / ou des explications supplémentaires.


0 commentaires

2
votes

Ceci ressemble à des registres matériels mappés de mémoire.

Si vous définissez une structure dans C code>, comment l'accéderiez-vous par pointeur? p>

LPC_TIM_TypeDef *timer = LPC_TIM0;
timer->IR = /* someValueHere */ 0;


0 commentaires

0
votes

Merci à @Adrian Mole et @tarek Dakhran pour votre aide et j'ai réécrit le code d'origine ci-dessus sans qualifier Typefef et définissez les macros. Est-ce que ma compréhension est correcte et que je peux maintenant accéder facilement aux membres de la structure à l'aide de LPC_TIM0-> IR, etc. et c'est purement de ma difficile compréhension de Typef et de Macros.

et basé sur ce code, lpc_tim0 sera pointé sur une structure Lpc_tim_typef et la structure sont mappés sur l'emplacement de la mémoire physique 0x40004000. xxx


2 commentaires

Vous devez réécrire l'en-tête fourni avec votre contrôleur.


Merci @Mike pour votre suggestion et je veux juste comprendre le code écrit est correct ou non. Parce que je suis toujours apprenant et que je ne veux pas désordonner le fichier d'en-tête fourni par le fournisseur de microcontrôleur, car il aura d'autres structures importantes liées à elle.