Questions générales C [Forums - Langage C]
Questions générales C [Forums - Langage C]
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 

Parcourir ce sujet :   1 Utilisateur(s) anonymes



(1) 2 3 4 ... 11 »


Questions générales C
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Salut tous !

Bon j'avance dans mon apprentissage avec le C. Et j'avoue que j'y prend un certain plaisir.

Ce soir, après avoir effectué quelques petites choses et notamment faire clignoter ma LED, et ce grâce à vous, j'ai réussi à adresser mon eeprom et afficheur I2C. Ils me répondent un "ACK" à tour de rôle.

Étant donné que j'ai pleins de questions qui me viennent, et que je ne veux pas polluer le forum, je les poserai ici si vous le voulez bien.

1) je sais écrire dans un registre quelconque. Par exemple en I2C, je fais
I2C_D 0x08
, et j'initie le transfert en mode transmit.
Mais je viens de me rendre compte que je ne sais pas lire un registre quelconque en C !!
Donc qu'elle est l'instruction que ferait
lda I2C_D
? Return ? Comment on fait ?

2) je galère avec la structure générale d'un code C. J'aimerais mettre mes fonctions I2C dans un fichier séparé (une lib) mais je comprend pas l'emploi d'un fichier h ?


Voilà pour commencer

Biz

Posté le : 26/02/2016 01:00
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Questions générales C
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1354
Hors Ligne
il suffit d'affecter la valeur de ton registre à une variable par exemple.

unsigned char accu;
// ...
accu I2C_D;


Tu n'est pas obligé de passer par une variable. Le simple fait de placer I2C_D dans la partie droite d'une affectation entraine une lecture.

D'une manière générale si tu écris a=b; il y a lecture de b puis écriture de a.

A+

Posté le : 26/02/2016 09:53
Transférer la contribution vers d'autres applications Transférer


Re: Questions générales C
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Merci Jacques,

Si je comprend bien, écrire I2C_D = accu est différent de accu = I2C_D ? Le 1er écrit dans I2C_D et le 2ème lit I2C_D ?

Posté le : 26/02/2016 10:35
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Questions générales C
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1943
Hors Ligne
tout a fait

C'est une base importante

bien retenir la formule de Jacques
"D'une manière générale si tu écris a=b; il y a lecture de b puis écriture de a."

Tu as d'autres opérateurs à connaitre en C
http://www.commentcamarche.net/conten ... -langage-c-les-operateurs

Il faudra juste veiller au type des variables utilisées ; il faudra quelquefois faire une conversion de type
par exemple
unsigned char u8toto = 56;
unsigned long u32titi = 230000 ;
unsigned long u32tata = 0 ;

u32tata = (unsigned long)u8toto * u32titi ; // on demande à convertir u8toto en unsigned long

Posté le : 26/02/2016 10:44
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Questions générales C
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Mmmm ... là ça se complique !!!


EDIT : Jacques, tu veux bien qu'on échange nos avatars ? lol

Posté le : 26/02/2016 11:13
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Questions générales C
Pilier de la communauté
Inscrit:
23/10/2005 11:40
De Aix les Bains (73)
Messages: 1943
Hors Ligne
non c'est tout simple

en ASM tu ne pouvais pas faire rentrer 66000 dans un registre 16 bit. Le compilateur ne sait pas faire non plus

et s'il sait manipuler des variables de 8 bit (char), 16 bit (short) ou 32 bit (long) il ne sait pas faire rentrer du 32 bit dans du 16.

Dans des langages comme le Visual Basique le compilo va supposer ce que tu voulais faire alors que tu n'as pas précisé, ca marchera jusqu'à ce qu'il n'arrive plus à supposer ce que tu veux et braouuuum il te pète à la figure.

De manière générale le C impose que les choses soient claires; il t'impose de déclarer les variables et leur type
il t'impose de déclarer les fonctions et les types qu'elles manipule en paramètre et en sortie
et dans le cas cité avant où tu manipules des variables de type différents ( des car et des long dans mon exemple) il va vouloir que tu lui dises qui devient quoi.

Posté le : 26/02/2016 11:36
Mieux vaut marcher dans la bonne direction que courir dans la mauvaise
Transférer la contribution vers d'autres applications Transférer


Re: Questions générales C
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Le lien m'apporte beaucoup David merci.

Je reviendrai plus tard sur la conversions de taille.

Tu peux m'expliquer le fichier H stp ? Peut-on s'en passer ?

Posté le : 26/02/2016 13:24
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Questions générales C
Pilier de la communauté
Inscrit:
27/09/2005 18:07
De Metz
Messages: 1354
Hors Ligne
Pour revenir sur l'affectation, le symbole = peut effectivement prêter à confusion car il ne s'agit pas d'une égalité.
Quand on écrit a = b; en fait ça devrait plus ressembler à ceci: a <- b; ou en asm lda b (charger a avec la valeur de b)

Citation :
Tu peux m'expliquer le fichier H stp ? Peut-on s'en passer ?
On peut s'en passer car quand on fait #include <toto.h>, ça ne fait ni plus ni moins qu'un copier coller du fichier toto.h à l'endroit où se trouve le #include.

Toutes les lignes commençant par # sont des commandes du préprocesseur qui sont des commandes qui interviennent au niveau du fichier source et donc avant la compilation.

L'avantage des fichiers h, c'est par exemple d'écrire une bonne fois pour toutes un certain nombre de déclaration telles que l'adresse des registres au lieu de faire figurer systématiquement ces lignes dans ton programme.

Là ou les fichiers .h sont indispensables quand on programme POUR UN pc, c'est qu'il permettent d'appeler les foncions des librairies qui sont déjà compilées et dont on ne possède pas le source. Les fichier .h possède les déclarations des fonctions que l'on peut appeler dans ces bibliothèques. Il faut savoir qu'en C, on ne peut utiliser que ce qui est déclaré au préalable, donc pour utiliser la fonction printf, il faut inclure stdio.h qui possède la déclaration de cette fonction (en fait son entête)

Posté le : 26/02/2016 16:02
Transférer la contribution vers d'autres applications Transférer


Re: Questions générales C
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
Ok c'est compris.

Mais par exemple, pour ma lib I2C que je suis en train de créer ; Si ma lib s'appelle I2C.c, et que j'appelle les fonctions à partir de mon main() de cette lib, à quoi pourrait me servir le H ? Puisque tous les registres sont déjà déclarés dans le mc9s08pa16.h ?

Et a quoi sert par exemple un _PORT_PTAD.Bits.PTAD3 (avec le underscore qui semblerait servir dans les macros) ?

Posté le : 26/02/2016 22:05
Les octets s'envolent, les écrits restent !
Transférer la contribution vers d'autres applications Transférer


Re: Questions générales C
Accro
Inscrit:
28/09/2005 11:53
De In Space
Messages: 157
Hors Ligne
Salut,

Le fichier *.h sert à mettre "les prototypes", c'est à dire les fonctions que l'on souhaite utiliser en dehors du fichier toto.c.

un prototype est une copie de la déclaration d'une fonction, sans celui-ci, la fonction est en quelque sorte privé : utilisable uniquement dans le fichier toto.c, en ajoutant le prototype dans un fichier toto.h, la fonction devient public est peut être utilisé dans un autre fichier *.c à la condition de faire appel à toto.h via un #include.

Posté le : 26/02/2016 23:03
“Tomber est permis ; se relever est ordonné.” proverbe russe
Transférer la contribution vers d'autres applications Transférer



 Haut   Précédent   Suivant
(1) 2 3 4 ... 11 »



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.

[Recherche avancée]


Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

Questions générales C [Forums - Langage C]