Développement logiciel pour microcontrôleurs PIC

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

La boucle for : init7.c et init71.c
Les fonctions A quoi ça sert ?
Introduction au Langage C,C++
A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
Rappels C.
Développement logiciel sur micro-contrôleurs PIC en C
Introduction au langage C
Calculs de complexité d'algorithmes
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
Algorithmique Résume.
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Types, variables et constantes.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
C.
M. BENJELLOUN : Info II Mohammed BENJELLOUN Service dInformatique Faculté Polytechnique de Mons
Tests et itérations Programmes séquentiels ne résolvent pas tous les problèmes exemple simple : calcul des racines d'un polynôme de d° 2 dans R Algorithme.
Tableaux Certains problèmes nécessitent beaucoup de variables du même type. Exemple : relevé de températures matin et soir dans 10 villes pour 10 jours.
Introduction : Compilation et Traduction
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
Les bases de l’Algorithmique
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Langage C Révision.
Récursivité.
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Algèbre de Boole et les Boucles
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Question Comment le compilateur fait-il pour évaluer une expression telle que : A + B lorsque A et B sont des données de types arithmétiques différents.
Base de programmation Script unity en c#.
Bases de la programmation en C++ 1 Les enchaînementsdinstruction Séquentiels. Exécutions dinstructions les unes à la suite des autres. Instructions séparées.
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Principes de programmation
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
La programmation en langage C
Plan troisième cours Instruction sélective Instruction répétitive
C++ : variables Déclaration de variables
LANGAGE C LP A2I IUT St DIE
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
Structures alternative et répétitive
La librairie assert.h.
L’essentiel du langage C
Introduction au C.
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
2.1 - Historique Chapitre 2 : Introduction au langage C++
Algorithmique Les structures Rappel L'enchaînement séquentiel
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
3 Les instructions. Cours 32 Plan du cours 3 Instruction Bloc Portée L’alternative Affectations =, +=, *=… Comment comparer –Comparer des réels –Comparer.
SIF-1053 Architecture des ordinateurs
Les types.
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
 Syntaxe du langage PHP
Microcontrôleurs PIC. 1ère séance Présentation du PIC16F876 Outils de programmation du PIC Le langage C Exemples d’applications simples 2ème séance Présentation.
B.Shishedjiev - Affectation1 Expressions et affectation Comment produire des nouvelles valeurs.
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
1. Spoon Christophe Delagarde, septembre 1998 I.U.T., Université de la Méditerrainée 2.
Langage de programmation
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Scripts et fonctions Instructions de contrôle
PRO-1027 Programmation Scientifique en C
pour les programmeurs en C++ Java 2 Part 1 3 Histoire de Java Projet de connexion des machines: 1991 Le nom Java a été introduit dans un café Développé.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Introduction au langage C
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Java Réalisé par: Mouna POKORA. PLAN: Définition : Historique: Caractéristiques: un langage orienté objet: un langage interprété : un langage portable:
Transcription de la présentation:

Développement logiciel pour microcontrôleurs PIC Langage C T.Berenguer

Développement d ’un projet Ecriture algorithme non Ecriture du logiciel Ecriture du source oui Compilation Erreurs ? Test du logiciel sur le matériel Debug du programme non Fonctionnement OK ? oui Programmation de la carte Fin du projet

Flux de données d ’un projet Fichiers source fichier1.c fichier2.c fichier3.asm mcc18 MPASMWIN Assembleur Compilateur Script pour le linkage fichier1.o fichier2.o fichier3.o Bibliothèques Fichiers objet lib1.lib script.lkr mplink Editeur de liens projet.hex projet.map projet.cof Fichiers de sortie Debug Programmation du composant

Programme source en C Commentaire /* bla bla Insertion d ’un fichier sur plusieurs lignes bla bla */ Insertion d ’un fichier #include < nom.ext > défini dans options #include " nom.ext "  dans dossier local Commentaire // bla bla sur 1 ligne Définition équivalence #define symbole valeur Déclaration des variables m , c , d u sont des octets en RAM Unsigned, char, void, while, if … sont des mots réservés. Il y en a 32 en C. Les accolades indiques aussi le début et la fin des fonctions. Fonction principale Son nom est main, c ’est un mot réservé. Le point virgule indique la fin d ’une instruction. On peut mettre plusieurs instructions sur une ligne. Un couple d ’accolades indique le début { et la fin } d ’un bloc d ’instructions.

Type longueur domaine de valeur Les types de données Type longueur domaine de valeur char ou signed char 8bits -128 … 127 unsigned char 8bits 0 ... 255 int ou short 16bits -32768 … 32767 unsigned int 16bits 0 ... 65535 long 32bits -2.147.483.648 ... 2.147.483.647 unsigned long 32bits 0 … 4.294.967.295 short long 24bits -8.388.608 ... 8.388.607 unsigned short long 24bits 0 … 16.777.215 float ou double 32bits -3,4 . 1038 ... 3,4 . 1038 double 64bits -1,7 . 10308 ... 1,7 . 10308

Déclaration des données en RAM Une variable doit être déclarée avant d ’être utilisée type nom; unsigned char unit; // unit est un octet 0..255 placé en RAM int maxi; // maxi mot 16 bit -32768…32767 placé en RAM char lettre; // lettre est un caractère code ASCII placé en RAM type nom = valeur_initiale; unsigned char unit = 10; // unit est un octet initialisé à 10 en RAM int maxi = 1024; // maxi mot 16 bit initialisé à 1024 en RAM char lettre = ‘A’; // caractère A code ASCII 65 en RAM unsigned char unit; unsigned char UNIT; unsigned char Unit; Ces 3 variables sont différentes ! Le langage C fait la différence entre les MAJUSCULES et les minuscules

Déclaration des données en ROM Elles sont rangées dans la ROM et ne sont donc pas modifiables rom type nom = valeur_initiale; rom unsigned char unit = 10; // unit est un octet initialisé à 10 en ROM rom int maxi = 1024; // maxi mot 16 bit initialisé à 1024 en ROM rom char lettre = ‘A’; // caractère A code ASCII 65 en ROM

#define nom valeur Les équivalences sont remplacées par leur valeur Equivalences Les équivalences sont remplacées par leur valeur par le pré-processeur du compilateur. #define nom valeur Espaces ou tabulations Une équivalence n ’est pas une instruction du programme mais une directive pour le compilateur afin de faciliter la programmation. #define maxi 150 temperature = maxi; // la variable temperature prend la valeur 150 #define led_allume 1 #define led_eteinte 0 led1 = led_allume; // la variable led1 prend la valeur 1 led2 = led_eteinte; // la variable led2 prend la valeur 0

Les fonctions prog void buzzer (void) { …. ….. } Initialisation des ports Led1 éteinte BP activé ? Led1 allumée Gestion du buzzer void init_port (void) { …. ….. } void main (void) { init_port(); led1 = 0; while(1) if(bp == 0) led1 = 1; buzzer(); } else led1 = 0;

Les opérateurs arithmétiques c = a + 2; // c = 5 Addition + a = 3; c = a - 2; // c = 1 Soustraction - a = 3; b = 11; c = a + b; // c = 33 Multiplication * a = 75; b = 3; c = a / b; // c = 25 Division / a = 75; diz = a / 10; // diz = 7 unite = a % 10 // unite = 5 c ’est à dire le reste Modulo % Reste de la division

Base 10 décimal Base 16 hexadécimal Base 2 binaire Bases Base 10 décimal symboles : 0 1 2 3 4 5 6 7 8 9 a = 26; c = a + 857; Base 16 hexadécimal symboles : 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F la nombre est précédé de 0x... a = 0x1a; // a = 26 a = 0x1A; // a = 26 a = 0x001a; // a = 26 Base 2 binaire symboles : 0 1 la nombre est précédé de 0b... a = 0b11010; // a = 26 a = 0b00011010; // a = 26 Le programmeur utilisera la base la plus adaptée et la plus facile à manipuler Le compilateur accepte aussi l ’utilisation de bases différentes dans un calcul : - a = 0x01101 >> 3; - b = ( c * 2 ) + ( a / 0b1010 );

Les opérateurs logiques a = 0b11001100; c = a & 0b10101010; // c = 0b1001000 ET & a = 0b11001100; c = a | 0b00111100; // c = 0b11111100 OU | a = 0x03; c = ~ a; // c = 0xFC Complément ~ a = 0b11001100; b = 0b10100010; c = a ^ b; // c = 0b01101110 OU exclusif ^ a = 0b00110000; c = a >> 2; // c = 0b00001100; Décalage à DROITE >> a = 0b00110000; c = a << 2; // c = 0b11000000; Décalage à GAUCHE <<

Liste de variables ou de constantes Autres opérateurs a = 55; a++; // a = 56 Incrément ++ a = 20; a--; // a = 19 Décrément -- a = 55; // a prend la valeur 55 a = a + b; // la somme de a et b est mise dans a Affectation = Séparateur ; a = 55; b = a + 1; Début et fin des fonctions Dans les tableaux pour séparer les éléments Utilisé dans les tests IF..THEN SWITCH.. CASE Utilisé dans les boucles FOR WHILE DO..WHILE Etc ... Bloc d ’instruction { .. .. .. } Liste de variables ou de constantes Séparateur , unsigned char TAB[5] = { 2, 5, 8, 20, 5 }; // tableau de 5 valeurs

Instruction conditionnelle IF…. ELSE ? Action 1 Action 2 Vrai Fausse if( a > b ) c = c - a; else c = c- b; Action1 et action2 sont une seule instruction Action1 et action2 sont un bloc d ’instructions if( a > b ) { c = c - a; d = c - a; } else { c = c - b; d = c - b; Si la condition est vrai faire l ’action 1 sinon faire action 2 ELSE n ’existe pas if( a > b ) { c = c - a; d = c - a; } if( condition ) action1; else action2; if( (a > b) && ( b > 0) ) c = c - a; else c = c- b; Condition multiples

Opérateurs de comparaison Supérieur > Supérieur ou égal >= Inférieur < Inférieur ou égal <= Egal == Différent != if( a > b ) if( a >= b ) if( a < b ) if( a <= b ) if( a == b ) if( a != b ) if( a = b ) ... else ... Ne pas confondre : l ’ affectation = le test de comparaison == Le compilateur ne détectera pas d ’erreur mais le résultat ne sera pas celui escompté. . . . Simplification if( a ) … else … ce test est : vrai si a > 0 faux si a = 0 Opérateurs logique de test ET && OU || NON ! if( (a > b) && ( b > 0) ) if( (a > b) || ( b > 0) ) if( !( a == b) )

Instruction conditionnelle SWITCH … CASE Remplace une suite de IF .. ELSE expression doit être un entier ou un caractère. Switch compare cette expression aux valeurs des différents case. L ’instruction break permet de sortir d ’un bloc. Ici cela permet de ne pas tester les case suivants. Default est effectué si aucun des case n ’est effectué. switch ( expression ) { case valeur1 : instruction(s) 1; break; case valeur2 : instruction(s) 2; break; case valeur3 : instruction(s) 3; break; default : instruction(s) par défaut; } Valeur led1 led2 led3 1 2 3 4 5 6 7 switch ( valeur ) { case 1 : led1 = 1; led2 = 0; led3 = 0; break; case 2 : led1 = 0; led2 = 1; led3 = 0; break; case 7 : led3 = 1; case 3 : led1 = 1; led2 = 1; break; default : led1 = 0; led2 = 0; led3 = 0; } 0 0 0 1 0 0 0 1 0 1 1 x 1 1 1 Répondre par 1 x si pas de modification

Boucle FOR Initialisation Condition ? Action Modification Sortie de la boucle Initialisation for ( initialisation ; condition ; modification ) { action; … ; } Version 1 for( x = 0 ; x < 5 ; x++ ) { action; } Version 2 for( x = 5 ; x > 0 ; x-- ) { action; } Version 2 simplifiée for( x = 5 ; x ; x-- ) { action; } Ces 2 boucles sont identiques. Action est exécutée 5 fois Attention aux conditions qui rendent la boucle infinie. x est vrai si x > 0 donc la boucle sera exécutée tant que x > 0

Tant que condition vraie faire... Boucle WHILE Tant que condition vraie faire... Condition ? Action Sortie de la boucle while (condition) { action; … ; } Cette boucle est identique à une boucle FOR x = 0; while ( x < 5 ) { action; x++; } Dans cette boucle action ne sera jamais exécutée car la condition est déjà fausse lors de la première entrée. x = 10; while ( x < 5 ) { action; x++; } while ( 1 ) { action; … … ; } Soit un bouton poussoir qui donne 0 si il est appuyé. Ici on fait l ’action tant que le poussoir est maintenu appuyé. On sort de la boucle quant le bouton n ’est plus appuyé. while ( bouton == 0 ) { action; } while(1) est une boucle qui permet d ’exécuter indéfiniment un bloc d ’instructions. Cette boucle est volontairement rendue infinie en testant une condition toujours vrai : 1 étant > 0 donc vrai . . . On trouve très souvent une boucle while(1) dans la fonction main().

Faire... tant que condition vraie Boucle DO … WHILE Faire... tant que condition vraie Condition ? Action Sortie de la boucle do { action; … ; } while (condition); Action est toujours exécutée au moins une fois que condition soit vraie ou fausse. x = 0; total = 0; do { total = total + x; x++; } while ( x < 5 ); Nombre d ’exécutions de la boucle : A la sortie de la boucle total = 5 10

type nom[taille] = { éléments … } ; LES TABLEAUX Un tableau permet de regrouper des variables ou des constantes de même type. Ces variables ou constantes sont appelées éléments du tableau. Un tableau doit être déclaré avant son utilisation. Obligatoire comme pour les variables et constantes Nom du tableau, respecter la case. Indique le nombre d ’éléments du tableau. L ’initialisation est facultative elle est de la forme : = { élément0 , élément1 , .. .. , élémentx } type nom[taille] = { éléments … } ; unsigned char TABLEAU[5] = { 1 , 10 , 30 , 40 , 50 } ; X = TABLEAU[0]; X = TABLEAU[3]; // x = 1 indice 0 = premier élément du tableau // x = 40 indice 3 = quatrième élément du tableau somme = 0; for(i = 0 ; i < 5 ; i++ ) { somme = somme + TABLEAU[i]; } Nombre d ’exécutions de la boucle : A la sortie de la boucle somme = 5 131

Fin de la première partie ...C Fin de la première partie à suivre...