Page Personnelle de Vincent Kerhoas
Vincent Kerhoas
Enseignant du Supérieur
Professeur Agrégé
Page Personnelle de Vincent Kerhoas

Langage C

Back                  << Index >>

Premier Programme et Compilation

Environnement de travail

Ouvrir un terminal sous linux.

Compilation avec GCC

compilation gcc

Premier Makefile

Afin de rendre la compilation plus simple, un makefile permet d’effectuer la compilation, puis l’édition de lien ( placement mémoire ).
Dès lors qu’un fichier makefile est présent dans un répertoire, la commande make exécute ce fichier.

Debug

Les exemples ci-dessous pourront être testés avec les 2 environnements suivants :

Avec une interface minimale (dbg)

L’option “-g” dans gcc permet de compiler un programme avec possibilité de debug.
( installation : cf install.html )

tdb

Avec un IDE ( STM32CUBEIDE )

Comme nous allons par la suite utiliser STM32CubeIDE , basé sur eclipse, nous pouvons également utiliser ce logiciel pour compiler et tester du code en natif ( sur PC ).

Chargement d’un projet :

Dans les exemples ci-dessous, après avoir récupéré et extrait le dossier compressé (.zip), décompresser le fichier.

Lancer stm32cubeide :

sélectionner le répertoire WORKSPACE_*

L’arborescence du projet est alors visible :

Pour compiler : CTRL+B

Si la compilation s’effectue sans erreur, un exécutable est généré ( prog_base )

Pour tester ( debuggage ), basculer dans l’environnement debug :

Sélectionner la configuration de debug :

Le programme est alors chargé, pour :

Pour visualiser les variables, on peut utiliser soit la fenêtre Variables ( Window -> Show View -> Variables ) ou Watch Expression ( Window -> Show View -> Watch Expression )

Les printf s’affichent dans la fenêtre Console


Modèle ( simplifié ) d’un système à processeur

modele.svg

La variable a contenant la donnée 5 est située à l’adresse 0x20000000.
Pour désigner l’adresse d’une variable, on utilise le symbole & ( &a).


Les Variables

Au cours de l’exécution d’un programme, le processeur effectue des calculs.
Ces calculs sont réalisés avec des variables.

En langage C il faut être précis sur les types utilisés.

Dans un premier temps nous allons retenir les types suivants :


Quelques exercices de Base

Algorithmie

Les Conditions

Les Boucles

Découvrir un nombre mystère

Q. Compléter la fonction main afin de faire deviner le nombre nbMyst tiré aléatoirement, selon l’algorithme suivant :

mot_mystere.svg

NOMBRE_MYSTERE

REMARQUE : La fonction printf est une fonction de haut niveau permettant d’afficher un message dans la console.

Les Fonctions : Calculs autour du cercle

Plutôt que de tout mettre dans la fonction main(), nous pouvons organiser notre code sous forme de fonctions

Q. Compléter le programme suivant afin de pouvoir calculer le diamètre, le périmètre et l’aire d’un cercle dont on a saisi le rayon.

REMARQUE : nous aurons besoin de la constante M_PI et de la fonction pow() présentes dans la bibliothèque math.
Il est donc nécessaire de modifier le makefile en conséquence.

CERCLE


Pointeurs

Concept

Je veux modifier le contenu d’une case mémoire dans une fonction :

pointeur1.svg

Conclusion : Le résultat du calcul a été affecté à un registre, la case mémoire notée ‘a’ n’a pas été modifiée.
Il faut transmettre l’adresse à la fonction, et non la valeur de la variable.

pointeur2.svg

Exercice : Fonction cutTime

Q. Compléter la fonction cutTime permettant de mettre à jour les variables hours, minutes et seconds, de telle sorte que 0 ⩽ minutes < 60 et 0 ⩽ seconds < 60.

REMARQUE : La fonction modulo % permet de calculer le reste de la division entière.
Ex :
45%60=45
62%60=2
Dans une boucle : i=(i+1)%5 –> i vaut successivement 0,1,2,3,4,0,1,2,3,4,…

cutTime


Tableaux

Concept

Le nom du tableau correspond à l’adresse du premier élément du tableau.

tab.svg

Exercice : Calcul min/max/moyenne

Q. Compléter les fonctions calc_min, calc_max et calc_average.

MIN_MAX_AVERAGE

Exercice : Chaines de caractères

Représentation d’une chaine de caractères dans un processeur : le code ASCII

Comme toute donnée dans un système à processeurs, les caractères sont codés avec des 0 et des 1.

EXEMPLES:

Affichage du résultat d’un calcul

Q. Compléter la fonction conv_int_str permettant de transformer un résultat entier ( inférieur à 100) en chaine de 2 caractères.

CONV_INT_STR

Login / Password

Considérons à titre d’exemple le programme login.c permettant de tester un login et un mot de passe :
REM : la fonction strcmp permet de comparer 2 chaînes de caractère.

LOGIN

Convertisseur de Monnaie

Q. Compléter le programme suivant permettant de convertir un montant d’une monnaie à une autre.

CURRENCY


Structures

Concept

Exercice : Calcul des Moyennes à partir de Notes d’Etudiants

Q. Compléter le fichier main.c permettant de calculer la moyenne de 3 étudiants à partir de 3 notes.

CALCUL_NOTES


Portée des variables

PORTEE : Endroit dans le code où une variable peut être utilisée.
DUREE D’EXISTENCE : la valeur de ma variable est-elle conservée si je sors d’une fonction ?

Variable Locale

Variable Globale

Variable Locale Statique

Si l’on souhaite retrouver la valeur modifiée de notre variable quand on retourne dans une fonction :

Variables Externe

Quand une variable globale est déclarée et initialisée dans un fichier, mais qu’on veut l’utiliser dans un autre fichier :


Back                  << Index >>