Sunteți pe pagina 1din 41

Langage Langage

Connaissances minimum au Connaissances minimum au


dveloppement logiciel sur dveloppement logiciel sur
micro micro--contrleurs PIC en C ANSI contrleurs PIC en C ANSI
Christian Dupaty
Acadmie dAix-Marseille
Pourquoi un langage volu ? Pourquoi un langage volu ?
Le langage C est : Le langage C est :
Evolu Evolu : Le code est indpendant du : Le code est indpendant du
processeur utilis processeur utilis
Typ Typ : Un type est lensemble des valeurs que : Un type est lensemble des valeurs que
CD CD 22
Typ Typ : Un type est lensemble des valeurs que : Un type est lensemble des valeurs que
peut prendre une variable peut prendre une variable
Modulaire et structur Modulaire et structur :Tout programme est :Tout programme est
dcomposable en tches simples qui seront dcomposable en tches simples qui seront
regroupes sous forme de fonctions qui regroupes sous forme de fonctions qui
regroups de faon cohrente en tches plus regroups de faon cohrente en tches plus
complexes (structurs) formeront le complexes (structurs) formeront le
programme. programme.
La mmoire La mmoire ROM ROM associe au microcontrleur contient le programme et associe au microcontrleur contient le programme et
les les donnes constantes donnes constantes, elle ne peut tre que lue. , elle ne peut tre que lue.
La mmoire La mmoire RAM RAM contient des contient des donnes donnes , utiles au programme mais , utiles au programme mais
volatiles, ce sont les volatiles, ce sont les variables variables..
Les mmoires sont organises en Les mmoires sont organises en octets octets. . Variables et constantes Variables et constantes
peuvent avoir des peuvent avoir des tailles diffrentes tailles diffrentes suivant ce quelles reprsentent. suivant ce quelles reprsentent.
Un code ASCII est cod sur 8 bits, un nombre entier peut tre cod Un code ASCII est cod sur 8 bits, un nombre entier peut tre cod
suivant la ncessit sur un, deux voir quatre octets. suivant la ncessit sur un, deux voir quatre octets.
La plupart du temps, la cration dun programme consiste La plupart du temps, la cration dun programme consiste utiliser utiliser
judicieusement des bibliothques judicieusement des bibliothques de sous programmes (gestion dun de sous programmes (gestion dun
afficheur LCD, fonctions mathmatiques, gestion des communications) afficheur LCD, fonctions mathmatiques, gestion des communications)
Afin de rendre le programme plus Afin de rendre le programme plus lisible lisible on sefforce de remplacer on sefforce de remplacer
CD CD 33
Afin de rendre le programme plus Afin de rendre le programme plus lisible lisible on sefforce de remplacer on sefforce de remplacer
les valeurs numrique par des noms les reprsentant (ex 3,14 les valeurs numrique par des noms les reprsentant (ex 3,14
sappellera PI) sappellera PI)
Un programme peut contenir des Un programme peut contenir des commentaires commentaires facilitant sa lecture facilitant sa lecture
Un programme sera toujours constitu dun programme principal qui est Un programme sera toujours constitu dun programme principal qui est
le point dentre du programme aprs une RAZ et de sous programmes le point dentre du programme aprs une RAZ et de sous programmes
plus ou moins imbriqus dtaillant les taches effectuer. plus ou moins imbriqus dtaillant les taches effectuer.
Un sous programme peut recevoir des paramtres et/ou retourner un Un sous programme peut recevoir des paramtres et/ou retourner un
rsultat (exemple rsultat (exemple : une opration mathmatique) : une opration mathmatique)
PROGRAMMATION STRUTUREE PROGRAMMATION STRUTUREE
PP
init
SP1
T1
SP2
T2
SP3
T3
CD CD 44
SP1
SP2
?
Retour
SP3
SP3
Retour
T4
T5
Retour
NON
OUI
Prprocesseur
Remplace les
#define et effectue
les #include
Compilateur C
Transforme le fichier C en un
fichier objet (code machine),
les fonctions pr-compils sont
dclares dans les fichiers *.h
Editeur de lien
LINKER
Lie (donne des adresses
aux fonctions) tous les
fichiers objets et cre un
fichier excutable
#include
<stdio.h>
main()
{ puts(" Bonjour
tous ");
}
Fichiers
header
*.h
Bibliothques
en C (texte)
*.c
Bibliothques pr-compiles
en code PIC18
(fichiers objet)
Fichier
CD CD 55
dclares dans les fichiers *.h fichier excutable
Programme
excutable
Fichier
source C
contenant la
fonction
main
Fichier de
symboles
pour debug
FLUX DE DONNEES DUN
COMPILATEUR C
christian.dupaty@ac-aix-marseille.fr
Premier programme Premier programme
Equivalence : Le pre-processeur
remplacera tous les duree par 10000
Dclaration de deux variables relles
Entre du programme principal
#include <p18f452.h> #include <p18f452.h>
#define duree 10000 #define duree 10000
char c; char c;
float pht; float pht;
void tempo(unsigned int count); void tempo(unsigned int count);
void main(void) void main(void)
{{
PORTB = 0x00; PORTB = 0x00;
TRISB = 0x00; TRISB = 0x00;
while(1) { while(1) {
CD CD 66
christian.dupaty@ac-aix-marseille.fr
while(1) { while(1) {
PORTB++; PORTB++;
tempo(duree); tempo(duree);
}}
}}
void tempo(unsigned int compte) void tempo(unsigned int compte)
{{
while(compte while(compte-- --); );
}}
Fonction ou sous programme
Reprsentation des nombres :
12 cod en dcimal reprsente 12
0xC cod en hexadcimal reprsente 12
0b00001100 cod en binaire reprsente 12
Les types de donnes Les types de donnes
Type Longueur Domaine de valeurs
signed char 8 bits -128 127
unsigned char 8 bits 0 255
signed int 16 bits -32768 32767
CD CD 77
signed int 16 bits -32768 32767
unsigned int 16 bits 0 65535
long 32 bits -2,147,483,648 2,147,483,647
unsigned long 32 bits 0 4,294,967,295
float 32 bits 3.4 * (10**-38) 3.4 * (10**+38)
double 64 bits 1.7 * (10**-308) 1.7 * (10**+308)
christian.dupaty@ac-aix-marseille.fr
Exemples de dclaration Exemples de dclaration
char a,b,c char a,b,c ;;
int table[100] int table[100] ; ;
char tableau[ ]={0x1c,A,55,0b00110101} char tableau[ ]={0x1c,A,55,0b00110101}
char *chaine= char *chaine= bonjour bonjour ;;
tableau de 100 entiers tableau de 100 entiers
trois caractres trois caractres
CD CD 88
char *chaine= char *chaine= bonjour bonjour ;;
char *p char *p ;;
le symbole le symbole * * dsigne un dsigne un pointeur pointeur sur un type dfini sur un type dfini
p est un pointeur sur des caractres p est un pointeur sur des caractres
chane de 8 caractres (finie par 0) chane de 8 caractres (finie par 0)
christian.dupaty@ac-aix-marseille.fr
Equivalences Equivalences
directive #define directive #define
Les quivalences sont remplaces par leur Les quivalences sont remplaces par leur
valeur par le pr valeur par le pr--processeur processeur
CD CD 99
#define pi 3.14 #define pi 3.14
#define sortie PORTA #define sortie PORTA
christian.dupaty@ac-aix-marseille.fr
Constantes Constantes
elles sont ranges dans la ROM et ne sont elles sont ranges dans la ROM et ne sont
donc pas modifiables. donc pas modifiables.
const int i=16569, char c=0x4c const int i=16569, char c=0x4c ;;
const float pi=3.14; const float pi=3.14;
CD CD 10 10
near near indique une adresse sur 16bits au contraire indique une adresse sur 16bits au contraire
de de far far sur 21 bits ou plus sur 21 bits ou plus
Le mot rserv const dfinit une constante Le mot rserv const dfinit une constante
Certains compilateurs utilisent Certains compilateurs utilisent ram rom ram rompour dfinir lemplacement pour dfinir lemplacement
de stockage ex : rom de stockage ex : rom const int i=16569; const int i=16569;
christian.dupaty@ac-aix-marseille.fr
Variables Variables
elles sont ranges dans la RAM elles sont ranges dans la RAM
char a,b=28,c=A char a,b=28,c=A ;;
volatile volatile dclare une variable modifiable par dclare une variable modifiable par
CD CD 11 11
volatile volatile dclare une variable modifiable par dclare une variable modifiable par
lenvironnement (un port // en entre par exemple) lenvironnement (un port // en entre par exemple)
ex : ex : volatile volatile char a; char a;
christian.dupaty@ac-aix-marseille.fr
VARIABLES LOCALES ET VARIABLES LOCALES ET
GLOBALES GLOBALES
GLOBLALES GLOBLALES
LOCALES LOCALES
soit une adresse fixe (statique) soit une adresse fixe (statique)
Dclares en dehors dune fonction Dclares en dehors dune fonction
toujours statiques toujours statiques
Dclares dans une fonction Dclares dans une fonction
CD CD 12 12
soit dans une pile LIFO (automatique) soit dans une pile LIFO (automatique)
static char var; static char var;
char var; char var;
christian.dupaty@ac-aix-marseille.fr
Oprateurs unaires Oprateurs unaires
() Appel de fonction
[ ] Indice de tableau tableau[3]=5;
! Ngation logique (NOT)
~ Complment binaire bit bit b=~a
- Moins unaire b=-a;
CD CD 13 13
- Moins unaire b=-a;
+ Plus unaire b=+a;
++ Pr ou postincrment b=a++;
-- Pr ou postdcrment b=a--;
& Adresse de b=&a;
* Indirection b=*a;
Oprateurs binaires Oprateurs binaires
* Multiplication c=a*b;
/ Division c=a/b;
+ Plus binaire c=a+b;
- Moins binaire c=a-b;
<< Dcalage gauche c=a<<b;
CD CD 14 14
<< Dcalage gauche c=a<<b;
>> Dcalage droite c=a>>b;
& ET entre bits c= a & b;
^ OU exclusif entre bits c= a ^b;
| OU entre bits c= a|b;
christian.dupaty@ac-aix-marseille.fr
TESTS TESTS
< Strictement infrieur if (a < b)
<= Infrieur ou gal if (a >= b)
> Strictement suprieur if (a > b)
>= Suprieur ou gal if (a >= b)
== Egal if (a ==b)
CD CD 15 15
== Egal if (a ==b)
!= Diffrent if (a != b)
&&ET logique if ((a==5) && (b==2))
|| OU logique if ((a==5) ||(b==2))
?: Condition z=(a>b)?a:b (Si a>b a z=a sinon z=b)
christian.dupaty@ac-aix-marseille.fr
Affectations et Auto Affectations et Auto--affectations affectations
= Affectation simple a=b;
*= Affectation produit a*=2 (a=a*2)
/= Affectation quotient a/=2 (a= a/2)
%= Affectation reste a%=2 (a= le reste de a/2)
+= Affectation somme a+=2 (a=a+2)
CD CD 16 16
+= Affectation somme a+=2 (a=a+2)
-= Affectation diffrence a-=2 (a=a-2)
&= Affectation ET entre bits a&=5 (a=a&5)
^= Affectation OU EX entre bits a^=5 (a=a^5)
|= Affectation OU entre bits a|==5 (a=a|=5)
<<=Affectation dcalage gauche a<<=5 (a=a<<5)
>>=Affectation dcalage droitea>>=5 (a=a>>5)
christian.dupaty@ac-aix-marseille.fr
Boucle FOR Boucle FOR
int a,i; int a,i;
for (i=0 for (i=0 ;i<100 ;i<100 ;i+ ;i++) +)
{{
Condition pour Condition pour
rester dans la boucle rester dans la boucle
Condition de dpart Condition de dpart
i < 100
i = i + 1
i = 0
CD CD 17 17
{{
a=a+i; a=a+i;
}}
char i=20 char i=20 ;;
for (;i<100 for (;i<100 ;i++) a=a+i; /* Pas de condition de dpart*/ ;i++) a=a+i; /* Pas de condition de dpart*/
for( for( ;;) ;;) ;; /*une boucle sans fin non standard*/ /*une boucle sans fin non standard*/
volution dune variable volution dune variable
christian.dupaty@ac-aix-marseille.fr
i = i + 1
a=a+i
Boucle WHILE Boucle WHILE
i=0; i=0;
while (i<100) while (i<100)
{{
a=a+i; a=a+i;
Condition de
continuation
Traitement
CD CD 18 18
a=a+i; a=a+i;
i++ i++ ;;
}}
Si la condition de boucle est fausse au Si la condition de boucle est fausse au
dpart la boucle nest jamais effectue dpart la boucle nest jamais effectue
christian.dupaty@ac-aix-marseille.fr
Traitement
Boucle DO WHILE Boucle DO WHILE
do do
{{
a=a+i; a=a+i;
i++ i++ ;;
Traitement
Condition
darrt
CD CD 19 19
i++ i++ ;;
}}
while (i<100) while (i<100)
la boucle est toujours effectue au moins une fois la boucle est toujours effectue au moins une fois
christian.dupaty@ac-aix-marseille.fr
darrt
Branchement : if Branchement : if -- else else
Condition du test Condition du test : ==, <,>,<=,>=, : ==, <,>,<=,>=, !=,&&,|| !=,&&,||
int calc(char c) int calc(char c)
{{
if (c=='+') s=a+b; else if (c=='+') s=a+b; else condition
CD CD 20 20
if (c=='+') s=a+b; else if (c=='+') s=a+b; else
if (c==' if (c=='--') s=a ') s=a--b; else b; else
if (c=='/') s=a/b; else if (c=='/') s=a/b; else
if (c=='*') s=a*b; if (c=='*') s=a*b;
return(s); return(s);
}}
christian.dupaty@ac-aix-marseille.fr
Action 1
Action 2
Brachement switch Brachement switch--case case
int calc(char c) int calc(char c)
{{
switch (c ) switch (c )
{{
case '+' : return (a+b); case '+' : return (a+b);
Condition 1
Traitement 1
Condition 2
CD CD 21 21
case '+' : return (a+b); case '+' : return (a+b);
case ' case '--' : return (a ' : return (a--b); b);
case '*' : return (a*b); case '*' : return (a*b);
case '/' : return (a/b); case '/' : return (a/b);
ddefault : return(0); efault : return(0);
}}
}}
christian.dupaty@ac-aix-marseille.fr
Traitement 2
Contrle des boucles Contrle des boucles
break break permet de sortir de la boucle en permet de sortir de la boucle en
cours (for, while, do while, switch cours (for, while, do while, switch
continue continue permet de sauter directement permet de sauter directement
litration suivante dune boucle litration suivante dune boucle
CD CD 22 22
litration suivante dune boucle litration suivante dune boucle
for(i=0 for(i=0 ;i<100 ;i<100 ;i++) ;i++)
{ if (i<50) continue else a=a+i;} { if (i<50) continue else a=a+i;}
exit exit permet de quitter directement le permet de quitter directement le
programme (inutile sur micro contrleur) programme (inutile sur micro contrleur)
christian.dupaty@ac-aix-marseille.fr
Pointeurs et donnes Pointeurs et donnes
ADRESSES ADRESSES DONNEES DONNEES
0x8000 0x8000 0x90 0x90
0x8001 0x8001 0x00 0x00
0x8002 0x8002 ?? ??
p: pointeur en
0x8000-0x8001
a: char en 0x9000
b: char en 0x9001
0X01 0X01
CD CD 23 23
0x8002 0x8002 ?? ??
.. ..
0x9000 0x9000 0xAA 0xAA
0x9001 0x9001 ?? ??
0x9002 0x9002 ?? ??
Excution de b=*p;
Execution de p=p+1;
0XAA 0XAA
christian.dupaty@ac-aix-marseille.fr
POINTEURS POINTEURS
Ce sont des Ce sont des variables variables qui contiennent ladresse dune variable qui contiennent ladresse dune variable, ,
Sur micro Sur micro--contrleur PIC18 un pointeur est une valeur sur contrleur PIC18 un pointeur est une valeur sur 16bits ou 16bits ou
20bits 20bits
Un pointeur est dclar par une * prcde du type de donne pointe Un pointeur est dclar par une * prcde du type de donne pointe
Le signe & devant une donne indique ladresse de celle ci et sa valeur. Le signe & devant une donne indique ladresse de celle ci et sa valeur.
char *p char *p ;; dclare un pointeur p sur un caractre dclare un pointeur p sur un caractre
CD CD 24 24
char *p char *p ;; dclare un pointeur p sur un caractre dclare un pointeur p sur un caractre
float *f float *f ;; dclare une pointeur sur un rel. dclare une pointeur sur un rel.
char *fonction(void) char *fonction(void) dclare une fonction qui retourne un dclare une fonction qui retourne un
pointeur sur un caractre pointeur sur un caractre
void (*fonction) (void) void (*fonction) (void) dclare un pointeur sur une fonction dclare un pointeur sur une fonction
void (*fonction) (void) = 0x8000 void (*fonction) (void) = 0x8000 cre un pointeur sur une cre un pointeur sur une
fonction en fonction en
8000 8000
christian.dupaty@ac-aix-marseille.fr
manipulation de pointeurs manipulation de pointeurs
int int a=1,b=2,c a=1,b=2,c ;;/*trois entiers */ /*trois entiers */
int int *p1,*p2 *p1,*p2 ;; /*deux pointeurs sur des entiers*/ /*deux pointeurs sur des entiers*/
p1=&a p1=&a ;; /*p1 contient ladresse de a*/ /*p1 contient ladresse de a*/
p2=p1 p2=p1 ;; //*p2 contient ladresse de a*/ *p2 contient ladresse de a*/
c=*p1 c=*p1 ; ; /*c gale le contenu de ladresse point /*c gale le contenu de ladresse point
CD CD 25 25
c=*p1 c=*p1 ; ; /*c gale le contenu de ladresse point /*c gale le contenu de ladresse point
par p1 donc c=a*/ par p1 donc c=a*/
p2=&b p2=&b ;; /*p2 pointe b*/ /*p2 pointe b*/
*p2=*p1 *p2=*p1
/*la donne ladresse point par p2 est place /*la donne ladresse point par p2 est place
dans ladresse point par p1, cela revient donc dans ladresse point par p1, cela revient donc
recopier a dans b*/ recopier a dans b*/
christian.dupaty@ac-aix-marseille.fr
exemple dutilisation des exemple dutilisation des
pointeurs pointeurs : la fonction echange : la fonction echange ::
void echange(int i void echange(int i ,int j) ,int j)
{{
int k; int k;
void echange(int *i void echange(int *i ,int *j) ,int *j)
{{
int k; int k;
echange(x,y); echange(x,y); echange(&x,&y); echange(&x,&y);
CD CD 26 26
int k; int k;
k=i; k=i;
i=j; i=j;
j=k; j=k;
}}
i et j sont permuts mais PAS x et y i et j sont permuts mais PAS x et y
int k; int k;
k=*i k=*i ;;
*i=*j *i=*j ;;
*j=k *j=k ;;
}}
Les contenus des adresses sont Les contenus des adresses sont
permuts, i et j pointant x et y permuts, i et j pointant x et y
christian.dupaty@ac-aix-marseille.fr
TABLEAUX TABLEAUX
Un tableau est un regroupement de variables de mme type Un tableau est un regroupement de variables de mme type
int chiffres[ ]={10,11,12,13,14,15,16,17,18,19} int chiffres[ ]={10,11,12,13,14,15,16,17,18,19}
int TAB[20]={1,12,13} int TAB[20]={1,12,13}
chiffre[0]=10, et chiffre[0]=10, et
chiffre[3]=13 chiffre[3]=13
TAB[3] TAB[19] = 0 TAB[3] TAB[19] = 0
CD CD 27 27
TAB est ladresse TAB est ladresse
de dbut du tableau de dbut du tableau
char TAB[2][3]={{1,2,3},{4,5,6}} char TAB[2][3]={{1,2,3},{4,5,6}}
TAB[3] TAB[19] = 0 TAB[3] TAB[19] = 0
TAB reprsente &TAB[0] TAB reprsente &TAB[0]
TAB[0] reprsente *TAB TAB[0] reprsente *TAB
TAB+i = &TAB[i] TAB+i = &TAB[i]
TAB+1 pointera la donne TAB+1 pointera la donne
suivante suivante
TAB[1][1]=5 TAB[1][1]=5
christian.dupaty@ac-aix-marseille.fr
Chanes de caractres Chanes de caractres
Ce sont des tableaux de caractres finissant par 0, Ce sont des tableaux de caractres finissant par 0,
une chane est entoure de " une chane est entoure de "
char message[ ]= char message[ ]= "bonjour"; "bonjour";
CD CD 28 28
char message[ ]= char message[ ]= "bonjour"; "bonjour";
char message[ ]={b,o,n,j,o,u,r, char message[ ]={b,o,n,j,o,u,r,\\0} 0} ;;
char *p= char *p= message ; message ;
while (*p while (*p !=0) putchar(*p++) !=0) putchar(*p++) ; ;
La fonction La fonction
puts(char *string); puts(char *string);
christian.dupaty@ac-aix-marseille.fr
CAST CAST transformation de type transformation de type
CAST automatiques : CAST automatiques :
char char --> int > int --> long > long --> float > float --> double > double
signed signed --> unsigned > unsigned
CD CD 29 29
float x float x ; int a=5 ; int a=5 ; ;
x=(float)a x=(float)a ;;
float x=5.6 ; int a ; float x=5.6 ; int a ;
a=(int)x ; a=(int)x ;
x=5.0 x=5.0
a=5 a=5
christian.dupaty@ac-aix-marseille.fr
Initialisation dun pointeur une Initialisation dun pointeur une
adresse absolue adresse absolue
#define PORTA *(unsigned char *)(0xFE0) #define PORTA *(unsigned char *)(0xFE0)
0xFE0 est un pointeur sur un caractre (CAST) 0xFE0 est un pointeur sur un caractre (CAST)
CD CD 30 30
ex: var=PORTA ex: var=PORTA
PORTA=var PORTA=var
PORTA est le contenu de cette PORTA est le contenu de cette
adresse adresse
christian.dupaty@ac-aix-marseille.fr
STRUCTURES STRUCTURES
Une structure est compose de variables Une structure est compose de variables
de types diffrents. de types diffrents.
struct identite { struct identite { char nom[30]; char nom[30];
int age; int age;
Nouveau type (facultatif) Nouveau type (facultatif)
CD CD 31 31
int age; int age;
} jean,jacques,groupe[20]; } jean,jacques,groupe[20];
jean.nom= jean.nom= bonnot ; bonnot ;
a=jean.age; a=jean.age;
christian.dupaty@ac-aix-marseille.fr
Structures Structures--Champs de bits Champs de bits
struct { struct {
unsigned RB0:1; unsigned RB0:1;
unsigned RB1:1; unsigned RB1:1;
unsigned RB2:1; unsigned RB2:1;
unsigned RB3:1; unsigned RB3:1;
Utilisation :
CD CD 32 32
unsigned RB3:1; unsigned RB3:1;
unsigned RB4:1; unsigned RB4:1;
unsigned RB5:1; unsigned RB5:1;
unsigned RB6:1; unsigned RB6:1;
unsigned RB7:1; unsigned RB7:1;
} PORTBbits ; } PORTBbits ;
PORTBbits.RB2=1;
A=PORTBbits.RB2;
christian.dupaty@ac-aix-marseille.fr
STRUCTURES STRUCTURES -- UNION UNION
Dans une UNION les champs partagent les mmes adresses. Dans une UNION les champs partagent les mmes adresses.
volatile near union { volatile near union {
struct { struct {
unsigned RE0:1; unsigned RE0:1;
unsigned RE1:1; unsigned RE1:1;
unsigned RE2:1; unsigned RE2:1;
unsigned RE3:1; unsigned RE3:1;
unsigned RE4:1; unsigned RE4:1;
unsigned RE5:1; unsigned RE5:1;
unsigned RE6:1; unsigned RE6:1;
unsigned RE7:1; unsigned RE7:1;
PORTEbits.RE0,
PORTEbits.ALE
PORTEbits.AN5
dsignent le mme bit du mme registre
CD CD 33 33
unsigned RE7:1; unsigned RE7:1;
} ; } ;
struct { struct {
unsigned ALE:1; unsigned ALE:1;
unsigned OE:1; unsigned OE:1;
unsigned WRL:1; unsigned WRL:1;
unsigned WRH:1; unsigned WRH:1;
unsigned :3; unsigned :3;
unsigned CCP2:1; unsigned CCP2:1;
} ; } ;
struct { struct {
unsigned AN5:1; unsigned AN5:1;
} ; } ;
} PORTEbits ; } PORTEbits ;
Les bits 4,5,6 ne sont pas dclars Les bits 4,5,6 ne sont pas dclars
Seul le bit 0 est dclar Seul le bit 0 est dclar
christian.dupaty@ac-aix-marseille.fr
Bibliothques standards C ANSI Bibliothques standards C ANSI
ctype.h ctype.h trouver les types ex: isdigit (chiffre) ou trouver les types ex: isdigit (chiffre) ou
islower islower
limits.h limits.h indique les limites des types indique les limites des types
string.h string.h traitement sur les chanes traitement sur les chanes
math.h math.h fonctions mathmatiques fonctions mathmatiques
CD CD 34 34
math.h math.h fonctions mathmatiques fonctions mathmatiques
stdlib.h stdlib.h conversion de chaines (atoi atof) conversion de chaines (atoi atof)
gnration dun nombre alatoire (rand, srand) gnration dun nombre alatoire (rand, srand)
allocation dynamique de mmoire (malloc, allocation dynamique de mmoire (malloc,
calloc), tri (qsort) calloc), tri (qsort)
stdio.h stdio.h fonctions dentres / sorties de fonctions dentres / sorties de
caractres caractres
christian.dupaty@ac-aix-marseille.fr
Ecrire court en C Ecrire court en C
void strcpy(char *s, char *t) void strcpy(char *s, char *t)
{{ int i; int i;
i=0; i=0;
do do
{s[i] =t[i] {s[i] =t[i]
i++; i++;
}}
void strcpy(char *s, char *t) void strcpy(char *s, char *t)
{{
while((*s++=*t++) while((*s++=*t++) != != \\0) 0) ;;
}}
CD CD 35 35
}}
while (s[i while (s[i--1] != 1] != \\0); 0);
}}
void strcpy(char *s, char *t) void strcpy(char *s, char *t)
{{ while((*s=*t) while((*s=*t) != != \\0) 0)
{{ s++ s++ ; ;
t++ t++ ;;
}}
}}
void strcpy(char *s, char *t) void strcpy(char *s, char *t)
{{
while (*s++=*t++) while (*s++=*t++) ;;
}}
Daprs C ANSI de K&R Masson
christian.dupaty@ac-aix-marseille.fr
Entres/sorties caractres (C ANSI) Entres/sorties caractres (C ANSI)
Les deux fonctions dE/S sur caractre Les deux fonctions dE/S sur caractre
Elle sont dfinies pour le matriel Elle sont dfinies pour le matriel
support des communications support des communications
CD CD 36 36
char getchar(void) char getchar(void)
int putchar(char) ou int putc(char) int putchar(char) ou int putc(char)
Envoie un caractre Envoie un caractre
(LCD par exemple) (LCD par exemple)
Lit un caractre en entre Lit un caractre en entre
(CLAVIER par exemple) (CLAVIER par exemple)
christian.dupaty@ac-aix-marseille.fr
Entres/sorties Chanes Entres/sorties Chanes (C ANSI) (C ANSI)
A partir de getchar et putchar A partir de getchar et putchar
void puts(char *chane) void puts(char *chane) ;;
affiche une chane
de caractres
CD CD 37 37
void puts(char *chane) void puts(char *chane) ;;
char *gets(char *chane) char *gets(char *chane) ; ;
saisie une chane de caractre finie
par un RC et retourne un pointeur sur
le premier caractre de cette chane
christian.dupaty@ac-aix-marseille.fr
printf printf
int a=10, b=27; int a=10, b=27;
printf( printf("" Formats Formats %d %d, , %x %x, , %X %X, , %#X %#X "" ,,a,a,a,b a,a,a,b); );
CD CD 38 38
printf( printf("" Formats Formats %d %d, , %x %x, , %X %X, , %#X %#X "" ,,a,a,a,b a,a,a,b); );
Formats 10, a, A, 0x1B Formats 10, a, A, 0x1B
sprintf sprintf
Identique printf, la sortie seffectue dans la Identique printf, la sortie seffectue dans la
mmoire mmoire
char a=0x41; char a=0x41;
CD CD 39 39
char a=0x41; char a=0x41;
char* adresse; char* adresse;
sprintf(adresse, sprintf(adresse,"" C=%c, Bin=%#010B C=%c, Bin=%#010B"" ,,a,a, a,a,); );
adresse pointera une zone mmoire contenant adresse pointera une zone mmoire contenant
C=A, Bin=0B01000001 C=A, Bin=0B01000001
Formats sur printf Formats sur printf (C ANSI) (C ANSI)
%c %c (char) (char)
%s %s ou S (chane de caractres) ou S (chane de caractres)
%d %d (entier) (entier)
%u %u (entier non sign) (entier non sign)
%x %x ou X (entier affich en ou X (entier affich en
\\ nn nouvelle ligne nouvelle ligne
\\ tt tabulation tabulation
\\ bb backspace backspace
\\ rr retour chariot retour chariot
\\ ff form feed form feed
CD CD 40 40
%x %x ou X (entier affich en ou X (entier affich en
hexadcimal) hexadcimal)
%b %b ou B (entier affich en binaire) ou B (entier affich en binaire)
%f (rel en virgule fixe) %f (rel en virgule fixe)
%p %p ou P (pointeur) ou P (pointeur)
%% (pour afficher le signe %) (pour afficher le signe %)
\\ ff form feed form feed
\\ '' apostrophe apostrophe
\\ \\ antislash antislash
\\ "" double quote double quote
\\ 00 nul nul
christian.dupaty@ac-aix-marseille.fr
Merci de votre attention Merci de votre attention
Exercez vous, Exercez vous,
un langage sapprend par la pratique un langage sapprend par la pratique
CD CD 41 41
Compilateur C/C++ gratuits Compilateur C/C++ gratuits : :
DOS DOS : TURBO C/C++ V1.01 : TURBO C/C++ V1.01 www.borland.fr www.borland.fr
WIDOWS WIDOWS : DEV : DEV--C++ C++ www.bloodshed.net www.bloodshed.net
christian.dupaty@ac-aix-marseille.fr

S-ar putea să vă placă și