Back | << | Index | >> |
Ouvrir un terminal sous linux.
|
|
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.
|
|
Les exemples ci-dessous pourront être testés avec les 2 environnements suivants :
L’option “-g” dans gcc permet de compiler un programme avec possibilité de debug.
( installation : cf install.html )
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
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).
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 :
Les Conditions
|
|
Les Boucles
|
|
|
|
Q. Compléter la fonction main afin de faire deviner le nombre nbMyst tiré aléatoirement, selon l’algorithme suivant :
|
REMARQUE : La fonction printf est une fonction de haut niveau permettant d’afficher un message dans la console.
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.
|
Je veux modifier le contenu d’une case mémoire dans une fonction :
|
|
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.
|
|
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,…
|
Le nom du tableau correspond à l’adresse du premier élément du tableau.
|
|
Q. Compléter les fonctions calc_min, calc_max et calc_average.
|
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:
_
* Le caractère ‘a’ est représenté par le code ascii 0x61
* Le caractère ‘1’ est représenté par le code ascii 0x31
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.
|
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.
|
Convertisseur de Monnaie
Q. Compléter le programme suivant permettant de convertir un montant d’une monnaie à une autre.
|
|
|
|
|
Q. Compléter le fichier main.c permettant de calculer la moyenne de 3 étudiants à partir de 3 notes.
|
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 ?
Si l’on souhaite retrouver la valeur modifiée de notre variable quand on retourne dans une fonction :
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 | >> |