Parcourir ce sujet :
1 Utilisateur(s) anonymes
Re: Questions générales C |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Bonjour tout le monde,
Merci Dark pour cette info. J'ai bien compris l'emploi du fichier h. D'ailleurs, je viens de terminer mes libs pour l'instant et qui concernent l'I2C, 1WIRE, et init de mon proc. J'ai inclus tout ça dans mon projet et ça marche. Je réitère ma question précédente ; Et a quoi sert par exemple un _PORT_PTAD.Bits.PTAD3 (avec le underscore qui semblerait servir dans les macros) ?
Posté le : 02/03/2016 10:55
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: Questions générales C |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Il faut que tu regardes dans le .h de ton µC. En principe, l'usage veut qu'on définisse des constantes symboliques en majuscules à l'aide de #define.
Apparemment, cette utilisation de majuscules est aussi utilisée pour le nommage des registres et la définition des registres. Exemple avec un 9S08QD:
/*** PTAD - Port A Data Register; 0x00000000 ***/
Posté le : 02/03/2016 11:25
|
|
![]() |
Re: Questions générales C |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
23/10/2005 11:40 De Aix les Bains (73)
Messages:
1943
![]() |
Salut
Les majuscules sont souvent une convention d’écriture pour les define et autres trucs dont la valeur/signification est fixe. rappel un define est une réécriture #define TOTO 23 signifie que le fait d’écrire TOTO ou 23 fera la même chose dans ton code le _ n'a a ma connaissance aucune signification en C, ça sert ici à faire un "espace" le .sert à désigner les éléments d'une structure Ce que Jacques te montre est un outil puissant du c, beaucoup utilisé dans le .h du µc, créé par défaut par Code Warrior. pour les port cela combine des structures dans des union; Cela sert a désigner un port complet ou juste une partie d'un port ou un bit tu peux utiliser ce genre d'outil dans ton code pour définir des Flag Par exemple tu déclares un octet u8status et tu vas donner un nom à chacun de ses bits
typedef union {
Tu déclares l'octet de status en faisant
OctetStatus u8MonOctetDeStatus
et ensuite soit tu manipules l'ensemble de l'octet
u8MonOctetDeStatus.u8loctet = 156 ;
soit tu manipules chacun des flags indépendamment
u8MonOctetDeStatus.Bits.FLAG_LED_ON = 1 ;
La structure seule, sans union est un outil très utile que l'on rencontre beaucoup. Les unions de structure comme ci dessus plaisent à certains, ne sont pas du tout utilisées par d'autres qui préfèrent utiliser des masques
u8MonOctetDeStatus |= MASK_LED_ON ;
Sur les Kinetis les définitions se font plutôt avec les masques dans les exemples et wizard de freescale, contrairement aux S08 ou les unions sont beaucoup utilisées.
Posté le : 02/03/2016 11:38
|
|
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
|
||
![]() |
Re: Questions générales C |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Ok j'en comprend à peu prés le principe.
D'ailleurs une question me vient : Comment puis-je redéfinir le nom d'un bit par exemple comme ceci je présume :
PORT_PTDD_PTDD1 = LED
Comme cela je fais ensuite
LED = 1
ça marche ça ?
Posté le : 02/03/2016 13:33
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: Questions générales C |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
23/10/2005 11:40 De Aix les Bains (73)
Messages:
1943
![]() |
pas du tout
si tu veux que écrire LED soit la même chose que écrire PORT_MACHIN_TRUC tu dois faire [code]#define PORT_MACHIN_TRUC LED et là tu pourras faire LED = 1 sans le define déclaré avant tu ne peux pas écrire LED = 1 tout simplement parce que LED le compilo ne sait pas ce que c'est.
Posté le : 02/03/2016 13:42
|
|
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
|
||
![]() |
Re: Questions générales C |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Et pour compléter la réponse de Charly avec un exemple concret en relation avec le code que j'ai donné plus haut, il suffit de s'inspirer de la ligne
<code>#define PTAD_PTAD0 _PTAD.Bits.PTAD0 </code> pour écrire
#define LED _PTAD.Bits.PTAD0
ou plus simple
#define LED PTAD_PTAD0
Posté le : 02/03/2016 20:24
|
|
![]() |
Re: Questions générales C |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
23/10/2005 11:40 De Aix les Bains (73)
Messages:
1943
![]() |
Et pour reboucler la boucle, je te rappelle à la première chose que Jacques t'as écrit dans sa première réponse
Citation : D'une manière générale si tu écris a=b; il y a lecture de b puis écriture de a. PORT_PTDD_PTDD1 = LED n'est pas possible parce que LED ne peut pas être lu (le compilateur lèvera une erreur : "qu'est ce que c'est LED ?")
Posté le : 02/03/2016 20:36
|
|
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
|
||
![]() |
Re: Questions générales C |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Je serais moins affirmatif Charly. Peut-être que je me trompe, mais d'après ce dont je me souviens, on peut lire un port de sortie. En fait, on récupérera la valeur du registre de sortie.
A confirmer ...
Posté le : 02/03/2016 21:22
|
|
![]() |
Re: Questions générales C |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
23/10/2005 11:40 De Aix les Bains (73)
Messages:
1943
![]() |
je parle de LED qui ne peut être lu parce que non déclaré.
Dans sa question dinastar parle de "redéfinir le nom d'un bit" en écrivant Nom_Du_port = led il confond avec #define Nom_du_port led
Posté le : 03/03/2016 06:29
|
|
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
|
||
![]() |
Re: Questions générales C |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Autant pour moi. Je n'avais pas remarqué cet aspect de la question.
Posté le : 03/03/2016 09:18
|
|
![]() |
Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.