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