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)
3 Réponses :
Comme vous l'avez correctement indiqué, le Ainsi, afin d'accéder aux membres de cette structure, Vous pouvez utiliser l'opérateur pour lire les données à partir du membre frais libres de demander des éclaircissements et / ou des explications supplémentaires. P> p> LPC_APB0_BASE CODE> et
macros LPC_TIM0_BASE CODE> LPC_TIM0_BASE, définissez l'adresse de l'endroit où les données de (probablement) sont situées. Le macro
lpc_tim0 code> est évalué à un pointeur em> à un
lpc_tim_typef code> structure à cet emplacement.
-> code> sur
lpc_tim0 code>; Par exemple, pour définir le membre
tc code>, utilisez le code comme celui-ci: p>
PC code> , utilisez ceci: p>
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;
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. P>
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.
C'est élémentaire C quelle partie de cela est déroutant? S'il vous plaît élaborer.