Langage C PCW

download Langage C PCW

of 34

Transcript of Langage C PCW

Langage CDveloppement logiciel sur micro-contrleurs PIC en C

Daprs Christian Dupaty, Acadmie d'Aix-Marseille

#include main() { puts(" Bonjour tous "); }

Bibliothques en C (texte) *.c

Fichiers header *.h

Bibliothques pr compiles (fichiers objet)

Editeur de lien

PrprocesseurRemplace les #define et effectue les #include Fichier source C contenant la fonction main

Compilateur CTransforme le fichier C en un fichier objet (code machine), les fonctions pr compiles sont dclares dans les fichiers *.h

LINKERLie (donne des adresses aux fonctions) tous les fichiers objets et cre un fichier excutable

FLUX DE DONNEES DUN COMPILATEUR C

Fichier de symboles pour debug

Programme excutable

Syntaxe du C#include #define pi 3.14 float d,c;Header de la bibliothque standard in/out. (pour printf) Equivalence : Le pr-processeur remplacera tous les pi par 3.14 Dclaration de deux variables relles globales En tte du programme principal int main() Dbut de la fonction main { Calculs d=2.0 ; c=pi*d ; Appel de la fonction puts (envoie une chane puts("bonjour tous\n"); de caractres sur le priphrique de sortie) printf("la circonfrence est %f m\n",c); appel de la printf (affiche des chanes } formats, ici c est affich sous format rel) Fin de la fonction main

La syntaxe du C allumer une led#include "essai.h" void init_micro(); void main() { init_micro(); output_low(PIN_A0); }

Librairies : les fichiers header *.h contiennent en gnral des quivalences ou les prototypes des fonctions pr-compliles ou non : ici essai.h contient les configurations des fusibles du C. Prototype : cest la dclaration dune fonction, il indique au compilateur le type de la fonction et ses paramtres de passage.

En tte de la fonction principale (main) Appel de la fonction init_micro. (pas de paramtre dentre) Appel de la fonction output_low. (permet de mettre un bit 0,

le paramtre dentre est ladresse du bit) void init_micro() { setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(VREF_LOW|-2); }

[email protected]

Les types de donnes standardType signed char ou char unsigned char signed int ou int unsigned int long int unsigned long int float double void Longueur 8 bits 8 bits 16 bits 16 bits 32 bits 32 bits 32 bits 64 bits Domaine de valeurs -128 127 0 255 -32768 32767 0 65535 -2 147 483 648 2 147 483 647 0 4 294 967 295 3.4 * (10-38) 3.4 * (10+38) 1.7 * (10-308) 1.7 * (10+308) vide

[email protected]

Les types de donnes propres PICCPar dfaut, les types entiers (int, char) de base sont non signs! Ils peuvent tre prcds de signed pour forcer le type sign.

Typeint1 ou short char int ou int8 int16 ou long int32 float void

Longueur1 bit 8 bits 8 bits 16 bits 32 bits 32 bits -

Domaine de valeurs0 ou 1 0 255 0 255 0 65535 0 4 294 967 295

3.4 * (10-38) 3.4 * (10+38)vide

Exemples de dclarationtrois caractres char tata,blabla,alea ; tableau de 100 entiers int table[100] ; char tableau[ ]={10,0x1c,A,55,4} char *p ; le symbole * dsigne un pointeur sur un type dfini p est un pointeur sur des caractres Remarque: un nombre entier en hexadcimal est prcd de 0x ou 0X, (0x1FB9) un nombre entier en dcimal n'a pas besoin de prfixe un nombre rel se note 13.145 ou 1.3145e+1. Dans les compilateurs pour C: notation binaire 0b11010001

Equivalencesdirective #define Les quivalences sont remplaces par leur valeur par le pr-processeur #define pi 3.14 #define fruit pomme

Constantes elles

sont ranges dans la ROM et ne sont donc pas modifiables. const int i=16569, char c=0x4c ; const float pi=3.14; Le mot rserv const dfinit une constante

VARIABLES LOCALES ET GLOBALESLes variables sont stockes en RAM afin dtre modifiables au cours du programme. Elles peuvent tre une adresse fixe (static) ou dans une pile (volatile). GLOBLALES LOCALESDclares en dehors dune fonction toujours statiques Dclares dans une fonction

soit une adresse fixe (statique)

static char toto;soit dans une pile LIFO (automatique)

char tata; ou auto char tata;

Branchement : if - elseCondition du test : ==, ,=, !=,&&,|| if (A>B) printf( A est suprieur B); else printf(A est infrieur ou gal B); si (A>B) alors afficher( A est suprieur B) sinon afficher(A est infrieur ou gal B)

Boucle WHILEi=0; while (i