2010-10-18 4 views
3

Je suis novice dans la programmation embarquée et j'ai suivi des cours à ce sujet. Et travailler avec ATSTK600.Comment écrire des fichiers d'en-tête pour les périphériques

Je cherche de l'aide sur "comment écrire des fichiers d'en-tête pour les périphériques". Eh bien, pour être précis, quelles sont les normes à suivre lors de l'écriture des fichiers d'en-tête comme nommer un registre, etc (comment créer .h & include, que je connais).

Récemment, j'ai reçu une mission pour créer un fichier d'entête que j'ai fait, qui était sur la bonne voie avec quelques erreurs à corriger avant de le soumettre à nouveau. Lors de la définition USART (fait une erreur car cela est très nouveau pour moi)

#define USART_RX $0032 [que le professeur a dit est faux à cause de signe $ #define ne fonctionnera pas]. La définition suivante est-elle correcte?

#define USART0_RX 32 
#define USART0_UDRE 34 
#define USART0_TX 36 

Une autre chose est que j'ai défini les ports comme suit, est-ce que cette convention de dénomination correcte?

#define I_PINS_PORTA 0x20 
#define DD_PORTA 0x21 
#define DATA_PORTA 0x22 

Eh bien, quelque part j'ai lu la convention de dénomination correcte est #define BASE_ADDR_PORTA 0x20 mais ce qui doit être utilisé pour DD_PORTA & I_PINS_PORTA?

Je cherchais de l'aide à ce sujet sur le web & est tombé sur ce forum.

P.S. AM utilisant C comme langage de programmation.

+1

Y a-t-il une raison pour laquelle vous ne voulez pas utiliser les fichiers d'en-tête d'Atmel? Ils sont déjà assez impressionnants. –

+0

@Mark: ceci est apparemment courswork –

+1

@Mark: Je suppose que l'instructeur cherche à amener les élèves à faire quelque chose de simple entièrement sur le métal nu sans compter sur les bibliothèques. Je pense que c'est une approche raisonnable - tout comme dans certaines classes de programmation, on pourrait demander aux étudiants d'implémenter quelque chose comme 'strcpy()' ou 'strcat()' sans utiliser les fonctions de la bibliothèque. Cela dépend des objectifs du cours. –

Répondre

2

Une convention que vous sembliez avoir suivie pour l'UART, mais pas pour PORTA, est de mettre le nom du système au début du nom. Il est plus facile de repérer le code. Ainsi, plutôt que

#define DD_PORTA 0x21 

vous pourriez avoir

#define PORTA_DD 0x21 

L'utilisation d'adresses de base pour les appareils qui couvrent une région de registres est aussi une bonne idée. Pour ce faire, vous auriez:

#define PORTA_BASE 0x20 

#define PORT_I  0x00 
#define PORT_DD  0x01 
#define PORT_DATA 0x02 

#define PORTA_I  (PORTA_BASE + PORT_I) 
#define PORTA_DD (PORTA_BASE + PORT_DD) 
#define PORTA_DATA (PORTA_BASE + PORT_DATA) 

Cela finit par être plus typé mais cela vous permet d'éviter les erreurs plus tard.

Différentes personnes et entreprises ont leurs propres préférences sur la façon dont les choses comme ceci sont nommées et leurs interfaces, donc il n'y a pas de réponse parfaite.

En ce qui concerne l'alignement des octets - je ne suis pas sûr de ce que vous demandez à ce sujet. L'alignement d'une adresse mémoire a à voir avec le reste de l'adresse divisé par la taille d'alignement (en octets) étant 0. De nombreux systèmes peuvent seulement charger et stocker à des adresses uniformément divisibles par 2, 4 ou 8 (ou le faire beaucoup plus rapidement aux adresses qui répondent à l'exigence). De plus, les performances du cache de l'UC sont affectées par l'alignement (le fait d'avoir une certaine quantité de mémoire nécessaire dans la mémoire cache peut être tout aussi mauvais que de ne pas l'avoir du tout).

+0

Merci pour vos conseils concernant l'adresse PORT, je vais corriger les choses dans mon dossier. Et en ce qui concerne Byte Alignment, je remerciais les gens sur le forum pour l'avoir si bien expliqué. J'aurais dû poster ce commentaire à l'endroit approprié ... mon mauvais! – sneezy

0

Ceci est similaire à une question qui a été soulevée il y a quelques jours à #define vs. enums for addressing peripherals. Je pense que la réponse acceptée est la meilleure façon de définir les interfaces pour les dispositifs embarqués. Je recommande également de lire le Dan Saks column référencé dans cette réponse.

Questions connexes