La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Langage C Développement logiciel sur micro-contrôleurs PIC en C Daprès Christian Dupaty, Académie d'Aix-Marseille.

Présentations similaires


Présentation au sujet: "Langage C Développement logiciel sur micro-contrôleurs PIC en C Daprès Christian Dupaty, Académie d'Aix-Marseille."— Transcription de la présentation:

1 Langage C Développement logiciel sur micro-contrôleurs PIC en C Daprès Christian Dupaty, Académie d'Aix-Marseille

2 Préprocesseur Remplace les #define et effectue les #include Compilateur C Transforme le fichier C en un fichier objet (code machine), les fonctions pré compilées sont déclarées dans les fichiers *.h Editeur de lien LINKER Lie (donne des adresses aux fonctions) tous les fichiers objets et crée un fichier exécutable #include main() { puts(" Bonjour à tous "); } Fichiers header *.h Bibliothèques en C (texte) *.c Bibliothèques pré compilées (fichiers objet) Programme exécutable Fichier source C contenant la fonction main Fichier de symboles pour debug FLUX DE DONNEES DUN COMPILATEUR C

3 Syntaxe du C #include #include #define pi 3.14 float d,c; int main() {d=2.0 ;c=pi*d ; puts("bonjour à tous\n"); printf("la circonférence est %f m\n",c); } Equivalence : Le pré-processeur remplacera tous les pi par 3.14 Header de la bibliothèque standard in/out. (pour printf) Déclaration de deux variables réelles globales En tête du programme principal Appel de la fonction puts (envoie une chaîne de caractères sur le périphérique de sortie) appel de la printf (affiche des chaînes formatés, ici c est affiché sous format réel) Calculs Début de la fonction main Fin de la fonction main

4 La syntaxe du C – allumer une led #include "essai.h" void init_micro(); void main() { init_micro(); init_micro(); output_low(PIN_A0); output_low(PIN_A0); } void init_micro() { setup_adc_ports(NO_ANALOGS); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_comparator(NC_NC_NC_NC); setup_vref(VREF_LOW|-2); setup_vref(VREF_LOW|-2);} En tête de la fonction principale (main) Librairies : les fichiers « header » *.h contiennent en général des équivalences ou les prototypes des fonctions pré-complilées ou non : ici essai.h contient les configurations des fusibles du µC. Prototype : cest la déclaration dune fonction, il indique au compilateur le type de la fonction et ses paramètres de passage. Appel de la fonction init_micro. (pas de paramètre dentrée) Appel de la fonction output_low. (permet de mettre un bit à 0, le paramètre dentrée est ladresse du bit)

5 Les types de données standard TypeLongueurDomaine de valeurs signed char ou char8 bits-128 à 127 unsigned char8 bits0 à 255 signed int ou int16 bits à unsigned int16 bits0 à long int32 bits à unsigned long int32 bits0 à float32 bits±3.4 * ( ) à ± 3.4 * ( ) double64 bits± 1.7 * ( ) à ± 1.7 * ( ) void-vide

6 Les types de données propres à PICC Par défaut, les types entiers (int, char) de base sont non signés! Ils peuvent être précédés de signed pour forcer le type signé. TypeLongueurDomaine de valeurs int1 ou short1 bit0 ou 1 char8 bits0 à 255 int ou int88 bits0 à 255 int16 ou long16 bits0 à int3232 bits0 à float32 bits ± 3.4 * ( ) à ± 3.4 * ( ) void-vide

7 Exemples de déclaration char tata,blabla,alea ; int table[100] ; char tableau[ ]={10,0x1c,A,55,4} char tableau[ ]={10,0x1c,A,55,4} char *p ; le symbole * désigne un pointeur sur un type défini p est un pointeur sur des caractères tableau de 100 entiers trois caractères Remarque: un nombre entier en hexadécimal est précédé de 0x ou 0X, (0x1FB9) un nombre entier en décimal n'a pas besoin de préfixe un nombre réel se note ou e+1. Dans les compilateurs pour µC: notation binaire 0b

8 Equivalences directive #define Les équivalences sont remplacées par leur valeur par le pré-processeur #define pi 3.14 #define pi 3.14 #define fruit pomme #define fruit pomme

9 Constantes elles sont rangées dans la ROM et ne sont donc pas modifiables. elles sont rangées dans la ROM et ne sont 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; Le mot réservé « const » définit une constante

10 VARIABLES LOCALES ET GLOBALES Les variables sont stockées en RAM afin dêtre modifiables au cours du programme. Elles peuvent être à une adresse fixe (static) ou dans une pile (volatile). GLOBLALES GLOBLALES LOCALES soit à une adresse fixe (statique) LOCALES soit à une adresse fixe (statique) soit dans une pile LIFO (automatique) Déclarées en dehors dune fonction toujours statiques Déclarées dans une fonction static char toto; char tata; ou auto char tata;

11 Branchement : if - else Condition du test : ==,, =, !=,&&,|| … if (A>B) printf( A est supérieur à B); else printf(A est inférieur ou égal à B); … si (A>B) alors afficher( A est supérieur à B) sinon afficher(A est inférieur ou égal à B)

12 Boucle WHILE i=0; while (i<100) {a=a+i;i++ ;} Si la condition de boucle est fausse au départ la boucle nest jamais effectuée i 0 tant que (i<100) faire: a a+i i i+1 i i+1

13 Boucle DO WHILE do{a=a+i;i++ ;} while (i<100) faire: a a+i i i+1 i i+1 tant que (i<100) Même si la condition de boucle est fausse au départ la boucle est effectuée au moins une fois

14 Branchement switch-case switch (c ) { case '+' : resultat=a+b;break; case '-' : resultat=a-b;break; resultat=a-b;break; case '*' : resultat=a*b;break; case '/' : resultat=a/b;break; default : resultat=a+b; default : resultat=a+b;} suivant la valeur de (c ) début suivant si '+' : resultat a+b si '-' : resultat a-b si '*' : resultat a*b si '/' : resultat a/b par default : par default : resultat a+b fin suivant Cette structure est une extension de la structure alternative si..alors..sinon et permet une meilleur compacité du code.

15 Boucle FOR for (i=0 ;i<100 ;i++) { a=a+i; a=a+i;printf("%d\n",a); } Action(s) à effectuer en dernier dans la boucle Condition pour rester dans la boucle Action(s) de départ Action(s) à effectuer dans la boucle peut se traduire par: i 0 tant que (i<100)) fairea a+i fairea a+iafficher_valeur(a) i i+1 Cette structure est une extension de la structure répétitive tant que … faire et permet une meilleure compacité du code.

16 Contrôle des boucles break permet de sortir de la boucle en cours (for, while, do while, switch) break permet de sortir de la boucle en cours (for, while, do while, switch) continue permet de sauter directement à litération suivante dune boucle continue permet de sauter directement à litération suivante dune boucle for(i=0 ;i<100 ;i++) { if (i<50) continue else a=a+i; } exit permet de quitter directement le programme (inutile sur micro contrôleur) exit permet de quitter directement le programme (inutile sur micro contrôleur)

17 POINTEURS Ce sont des variables qui contiennent ladresse dune autre variable. Sur micro-contrôleur un pointeur est une valeur sur 16bits. Un pointeur est déclaré par une * précédée du type de donnée pointée Le signe & devant une donnée indique ladresse de celle ci et sa valeur. char *toto ; déclare un pointeur toto sur un caractère float *tata ; déclare une pointeur tata sur un réel. Au sein d'un programme *toto désigne la valeur pointée par toto, alors que toto désigne l'adresse à laquelle est stockée cette valeur. L'intérêt des pointeurs est de manipuler des adresses donc des zones entières de données comme par exemple une chaîne de caractères.

18 manipulation de pointeurs On pourra se servir des pointeurs pour accéder directement à un port du µC: On pourra se servir des pointeurs pour accéder directement à un port du µC: // Une led est câblée sur PB4, allumée sur un état bas char*portB; char*portB;//portB est un pointeur sur un octet. portB = 0x06; portB = 0x06; //on définit l'adresse du pointeur ici le portb à l'adresse $06while(true){ *portB=0b ; *portB=0b ; //on fait clignoter la led.delay_ms(300);*portB=0b ;delay_ms(600);} Sous PICC, il existe plusieurs autres possibilités pour accéder aux ports ou aux registres du µC. Celle-ci est plus générale et plus transposable à d'autres compilateurs et d'autres marques de µC.

19 TABLEAUX Un tableau est un regroupement de variables de même type C'est une façon plus commode, dans certains cas, d'utiliser les pointeurs. int chiffres[ ]={1,2,4,8,16,32,64}; int TAB[20]={1,12,13,-100}; float toto[10]; char TATA[2][3]={{1,2,3},{4,5,6}} le tableau est affecté avec les valeurs entre { } la taille du tableau est automatiquement ajustée à 7 entiers. TAB est un tableau de 20 entiers dont seuls les 4 premiers sont affectés TATA est un tableau à 2 dimensions, on utilise 2 indices. toto est tableau de 10 réels sans affectation. TAB représente l'adresse de début du tableau, pour accéder aux différentes valeurs du tableau, on utilise un indice qui démarre à 0, ici TAB[0] vaut 1, TAB[1] vaut 12, TAB[2] vaut 13 etc …

20 Chaînes de caractères Ce sont des tableaux de caractères codés en ASCII finissant par la valeur $00, une chaîne est entourée de " Ce sont des tableaux de caractères codés en ASCII finissant par la valeur $00, une chaîne est entourée de " char message[ ]= "bonjour"; char message[ ]={b,o,n,j,o,u,r,0x00} ; deux façons différentes de déclarer et d'affecter une chaîne de caractères

21 Présentation de PIC C PIC C : un environnement de développement en C complet pour PIC. (éditeur, compilateur, débugger, moniteur rs232 …) un environnement de développement en C complet pour PIC. (éditeur, compilateur, débugger, moniteur rs232 …) un nombre assez important de fonctions intégrées et de bibliothèques. un nombre assez important de fonctions intégrées et de bibliothèques. prise en main rapide prise en main rapide Ses inconvénients: On notera surtout un non respect de la norme C ANSI (comme on l'a déjà vu pour les types), des fonctions parfois mal documentées

22 L'utilisation de PIC C PIC C comprend un "wizard" (assistant) qui permet de se passer de connaître parfaitement les registres et les bits de configuration. On choisit: le µC le µC les ports de communication (RS232, SPI, I²C) les ports de communication (RS232, SPI, I²C) les timers les timers les entrées analogiques et le format (8 bits ou 10 bits) les entrées analogiques et le format (8 bits ou 10 bits) les interruptions utilisées les interruptions utilisées les composants connectés les composants connectés Cet assistant crée automatiquement le bout de programme nécessaire qu'il serait fastidieux d'écrire à la main.

23 L'utilisation de PIC C L'utilisation de PIC C (suite) On se retrouve avec un texte de ce type: #include "C:\Program Files\PICC\my examples\test.h" void main() { setup_adc_ports(NO_ANALOGS); setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_psp(PSP_DISABLED); setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4); setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); setup_vref(FALSE);} l'assistant a créé un fichier.h dans lequel se trouve les configurations l'assistant a placé au début du programme principal toutes les initialisations nécessaires

24 Pratique de PIC C TP1 Voir texte du TP et notice de CCS

25 Entrées/sorties caractères Les deux fonctions dE/S sur caractère Les deux fonctions dE/S sur caractère Elle sont définies pour le matériel support des communications char getchar(void) char getchar(void) int putchar(char ) int putchar(char ) Envoie un caractère (LCD par exemple) Lit un caractère en entrée (CLAVIER par exemple)

26 Entrées/sorties Chaînes A partir de getchar et putchar void puts(char *chaîne) ; void puts(char *chaîne) ; char *gets(char *chaîne) ; char *gets(char *chaîne) ; saisie une chaîne de caractère finie par un RC et retourne un pointeur sur le premier caractère de cette chaîne affiche une chaîne de caractères

27 PRINTF printf(format, liste de valeurs) char a=10 ; float b= printf(" décimal %d, hexa %x, reel %f ",a,a,b) ; affichera : décimal 10, hexa A, reel 3,1412 sprintf(chaîne, format, liste de valeurs) écrit dans chaîne

28 Formats sur printf %c (char) %c (char) %s (chaîne de caractères, jusqu'au \0) %s (chaîne de caractères, jusqu'au \0) %d (int) %d (int) %u (entier non signé) %u (entier non signé) %x ou X (entier affiché en hexadécimal) %x ou X (entier affiché en hexadécimal) %f (réel en virgule fixe) %f (réel en virgule fixe) %p (pointeur) %p (pointeur) % (pour afficher le signe %) % (pour afficher le signe %) \ n nouvelle ligne \ t tabulation \ b backspace \ r retour chariot \ f form feed \ ' apostrophe \ \ antislash \ " double quote \ 0 nul

29 Bibliothèques standards C ANSI ctype.h trouver les types ex: isdigit (chiffre) ou islower ctype.h trouver les types ex: isdigit (chiffre) ou islower limits.h indique les limites des types limits.h indique les limites des types string.h traitement sur les chaînes string.h traitement sur les chaînes math.h fonctions mathématiques math.h fonctions mathématiques stdlib.h conversion de chaines (atoi atof) génération dun nombre aléatoire (rand, srand) allocation dynamique de mémoire (malloc, calloc), tri (qsort) stdlib.h conversion de chaines (atoi atof) génération dun nombre aléatoire (rand, srand) allocation dynamique de mémoire (malloc, calloc), tri (qsort) time.h fonctions liée à lheure et à la génération de nombre aléatoires time.h fonctions liée à lheure et à la génération de nombre aléatoires

30 Opérateurs unaires ()Appel de fonction []Indice de tableautableau[3]=5; !Négation logique (NOT) ~Complément binaire bit à bitb=~a -Moins unaireb=-a; +Plus unaireb=+a; ++Pré ou postincrémentb=a++; --Pré ou postdécrémentb=a--; &Adresse deb=&a; *Indirectionb=*a;

31 Opérateurs binaires *Multiplicationc=a*b; /Divisionc=a/b; +Plus binairec=a+b; -Moins binairec=a-b; <>Décalage à droitec=a>>b; &ET entre bitsc= a & b; ^OU exclusif entre bitsc= a ^b; |OU entre bitsc= a|b;

32 TESTS = b) >Strictement supérieurif (a > b) >=Supérieur ou égalif (a >= b) ==Egalif (a ==b) !=Différentif (a != b) &&ET logiqueif ((a==5) && (b==2)) ||OU logiqueif ((a==5) ||(b==2)) ?:Conditionz=(a>b)?a:b (Si a>b a z=a sinon z=b)

33 Affectations et Auto-affectations =Affectation simplea=b; *=Affectation produita*=2 (a=a*2) /=Affectation quotienta/=2 (a= a/2) %=Affectation restea%=2 (a= le reste de a/2) +=Affectation sommea+=2 (a=a+2) -=Affectation différencea-=2 (a=a-2) &=Affectation ET entre bitsa&=5 (a=a&5) ^=Affectation OU EX entre bitsa^=5 (a=a^5) |=Affectation OU entre bitsa|==5 (a=a|=5) >=Affectation décalage droitea>>=5 (a=a>>5)

34 Merci de votre attention Exercez vous, un langage sapprend par la pratique Compilateur C/C++ gratuits : DOS : TURBO C/C++ V1.01 DOS : TURBO C/C++ V1.01 WINDOWS : DEV-C++ WINDOWS : DEV-C++ très performant, orienté C++ mais on peut faire du C, utilisé par beaucoup de programmeurs chevronnés; certaines fonctions de TurboC++ ne sont pas supportées Pour PIC: CC5x Pour PIC: CC5x (C'est un bon compilateur limité à 1k de code compilé par module, à intégrer à MPLAB. Très peu de fonctions intégrées : impossible de faire tourner des programmes écrits pour PICC avec CC5x, il faut reécrire ses librairies)


Télécharger ppt "Langage C Développement logiciel sur micro-contrôleurs PIC en C Daprès Christian Dupaty, Académie d'Aix-Marseille."

Présentations similaires


Annonces Google