Vous êtes sur la page 1sur 23

Guide de prise en main de Keil

Auteur : S. DI MERCURIO

Version : 1

Table des matières

1.Présentation de l'interface

3

1.1.Mode éditeur de texte

3

1.2.Description des icônes du mode éditeur

3

1.3.Mode debuggeur

5

1.4.Description des icônes du mode debuggeur

5

2.Installation de Keil et des chaines de compilation alternatives

7

2.1.Installation de Keil

7

2.2.Installation de la chaine de compilation GCC

7

3.Les projets sous Keil

9

3.1.Création d'un nouveau projet

9

3.2.Différences concernant la chaîne de compilation GCC

19

3.3.Compilation et exécution/debug d'un programme

20

4.Arborescence du dépôt SVN

21

5.Problèmes connus et corrections

23

2/23

1. Présentation de l'interface

1.1. Mode éditeur de texte

Fenetre du projet

Editeur de texte

du projet E d i t e u r d e t e x t e

Fenetre de sortie

1.2. Description des icônes du mode éditeur

Compile le fichier actif

Compile le fichier actif

Compile et link le projet

Compile et link le projet

3/23

Recompile tout les fichiers du projets, inconditionnellement, et link.

Recompile tout les fichiers du projets, inconditionnellement, et link.

Gère les options d'un objet (sélectionné dans la fenêtre « projet », ou du projet

Gère les options d'un objet (sélectionné dans la fenêtre « projet », ou du projet dans sa globalité

 

Permet de gère les groupe, les cible de

compilation et les chaînes de compilation à utiliser.

compilation et les chaînes de compilation à utiliser.

Entre ou sort du mode « debug »

Entre ou sort du mode « debug »

Télécharge le programme compilé dans la cible.

Télécharge le programme compilé dans la cible.

4/23

1.3.

Mode debuggeur

Vue processeur

Code source et desassemblé

p r o c e s s e u r Code source et desassemblé Fenetre de

Fenetre de commande

Fenêtres de

visualisation (stack,

variables,

)

1.4. Description des icônes du mode debuggeur

Réaliser un reset sur la cible

Réaliser un reset sur la cible

Lance le programme (run)

Lance le programme (run)

Stop l’exécution

Stop l’exécution

Step in (exécution pas à pas en suivant les appels de fonction)

Step in (exécution pas à pas en suivant les appels de fonction)

5/23

Step over (exécution pas à pas en ignorant les appels de fonction)

Step over (exécution pas à pas en ignorant les appels de fonction)

Step out (termine l’exécution de la fonction en cours et stop)

Step out (termine l’exécution de la fonction en cours et stop)

Run to (exécution jusqu'à la ligne en cours)

Run to (exécution jusqu'à la ligne en cours)

Efface tous les points d’arrêt

Efface tous les points d’arrêt

6/23

2. Installation de Keil et des chaines de compilation alternatives

2.1. Installation de Keil

La dernière version de l'outil se trouve à l'adresse http://www.keil.com. L'archive à télécharger se trouve dans le menu « évaluation software », puis choisir la version ARM et s'enregistrer.

L'archive contient l'environnement KEIL (IDE), le compilateur fourni par ARM (qu'on appellera par la suite ARMCC), ainsi qu'un ensemble d'exemple fourni soit par KEIL, soit par le fabriquant de la puce.

L'outil cherche a s'installer dans c:\keil. Même si ce répertoire n'est pas très judicieux, il est préférable de la laisser ainsi, certains outils n'aimant pas les chemins long.

ainsi, certains outils n'aimant pas les chemins long. Rien de spécial dans cette installation par la

Rien de spécial dans cette installation par la suite. Une fois installé, l'IDE est prêt à être utilisé avec le compilateur ARMCC.

Dans le cas de l'utilisation d'une licence, il faudra bien entendu configurer l'outil pour l'utiliser.

De plus, il existe un fichier « TOOLS.INI » dans le répertoire Keil. L'installation ayant été faite avec les droits administrateurs, il est préférable de redonner des droits de simple utilisateur en écriture dans ce fichier.

2.2. Installation de la chaine de compilation GCC

Si l'on souhaite utiliser le compilateur GCC (compilateur non limité et sans licence), on peut installer la chaine fournie par CodeSourcery. Il faut en tout cas une chaine supportant le Cortex-M3, patch rajouté à la branche principale du GCC courant 2010.

L'archive peut être téléchargé sur http://www.codesourcery.com. Il faut ensuite choisir

7/23

« Codebench » et plus spécifiquement la version « lite ». Enfin, la cible doit être EABI.

A l'installation, rien de particulier, les options par défaut sont bien adaptées.

la cible doit être EABI. A l'installation, rien de particulier, les options par défaut sont bien

8/23

3. Les projets sous Keil

3.1. Création d'un nouveau projet

La création d'un nouveau projet commence toujours par le menu « Project | New µvision project ».

Après avoir indiqué dans quel répertoire créer le projet, l'IDE demande de choisir le type de micro.

9/23

Dans la liste déroulante « Data Base », choisir le fabriquant (ST Microelectronique) et la

Dans la liste déroulante « Data Base », choisir le fabriquant (ST Microelectronique) et la puce qui va bien. Cliquer sur « OK ».

Si la chaîne de compilation sélectionnée est « ARM », l'IDE propose de rajouter au projet un fichier de démarrage (STM32F10x.s) : celui-ci crée la table des vecteurs d'interruption et permet de faire le bootstrap du micro → acceptez !

et permet de faire le bootstrap du micro → acceptez ! Une fois le projet crée,

Une fois le projet crée, l'IDE ressemble à cela :

10/23

La fenêtre « Project » ne contient pas grand chose a part une cible «

La fenêtre « Project » ne contient pas grand chose a part une cible « Target 1 », qui comprend un groupe « Source Group 1 » qui lui même ne contient que notre fichier d’amorçage.

Les groupes sont des regroupements logiques d’éléments (généralement du code source) et leurs organisations et nombres n'ont pas de rapport avec l'arborescence des même fichiers sur le disque. C'est une vue logique ou abstraite du projet.

On pourra donc créer un groupe « drivers » pour y mettre tout les fichiers des drivers, un groupe « appli » contenant les fichiers applicatifs, un groupe « OS » pour le système d'exploitation, etc …

La cible représente un ensemble de paramétrage (qui englobent au final soit le simulateur, soit la cible réelle). Comme paramètre variant d'une cible à l'autre, on trouve les options de compilation, les clefs de compilation voir l'ajout, ou le retrait, de fichiers à compiler.

L’étape qui suit consiste donc à rajouter des fichiers au projets. Pour ce faire, rajoutez un ou plusieurs groupe au projet, en cliquant avec le bouton droit dans la fenêtre de projet, sur le nom de la cible.

Choisissez « Add group » et donnez un nom a votre groupe

11/23

Une fois le ou les groupes créés, rajoutez des fichiers à ces groupe. Cliquez avec

Une fois le ou les groupes créés, rajoutez des fichiers à ces groupe. Cliquez avec le bouton droit dans la fenêtre de projet sur un groupe et choisissiez « Add files to group ». Sélectionnez le ou les fichiers souhaités et validez.

12/23

Une fois ces étapes réalisées, il reste à configurer le projet (options de compilation) :

Une fois ces étapes réalisées, il reste à configurer le projet (options de compilation) : Cliquez sur pour ouvrir la fenêtre de configuration du projet.

à configurer le projet (options de compilation) : Cliquez sur pour ouvrir la fenêtre de configuration

13/23

L'onglet « Target » et pré-rempli lors du choix du micro. Il faut sélectionner «

L'onglet « Target » et pré-rempli lors du choix du micro. Il faut sélectionner « Use Micro Lib », une bibliothèque plus compacte et adaptée au jeu d'instructions Thumb-2. Si le quartz externe n'est pas à 8 Mhz, changez la valeur. Si un système d'exploitation de Keil doit être utilisé, choisissez le dans la liste.

Les onglets « Output » et « Listing » permettent d'indiquer dans quel répertoire générer le projet et quelle quantité d'information doit être générée.

L'onglet « User » permet de rajouter des commandes (scripts) exécutées avant, pendant ou après différentes étapes de la compilation et du link.

L'onglet « C/C++ » (et de manière similaire l'onglet « Asm ») permet de régler les options de compilation globales du projet :

14/23

On retrouve, de haut en bas, l'activation de clef de compilation, le réglage du niveau

On retrouve, de haut en bas, l'activation de clef de compilation, le réglage du niveau d'optimisation, ainsi que d'options pilotant la génération du code, et enfin la liste des répertoires a parcourir lors des includes de fichier.

La zone « Misc » est libre pour rajouter des options non gérées par l'IHM et la zone « compiler control string » permet, comme son nom l'indique de vérifier la chaîne d'option passée au compilateur.

L'onglet « Linker » permet, de manière similaire, de régler les options liées à l’édition de lien :

15/23

De base la fenêtre est pré-rempli avec les informations venant de la description de la

De base la fenêtre est pré-rempli avec les informations venant de la description de la puce choisie. La plupart du temps, il n'est pas nécessaire de régler quoi que ce soit ici.

Cependant, lorsque le mapping du projet à besoin d’être géré finement, on pourra agir sur un certain nombre de point :

Use Memory Layout from Targetr Dialog : Lorsque cette option est activée, un fichier .sct (scatter file) est généré : il peut être édité est servira de script au linker pour indiquer a quelles adresses doivent être mise les différentes sections de code et data. Le fichier sct a utilisé est indiqué dans le champ « scatter file »

Make RW/RO Section position independant : sert a généré du code indépendant de sa position en mémoire. Surtout utile lors de chargement dynamique de code, probablement inutile dans le cas de cette puce.

Don't search standard libraries : utilisé pour faire une compilation sans utilisation de bibliothèque « systeme » (fournissant stdio.h, stdlib.h …)

L'onglet « debug » permet de régler ce qui a trait au debugger. C'est dans cet onglet qu'il est possible de choisir entre la cible réel, ou le simulateur.

16/23

La fenêtre est scindée verticalement en deux zones : à gauche, les options liées au

La fenêtre est scindée verticalement en deux zones : à gauche, les options liées au simulateur, à droite les options liées à une sonde de debug, et donc à une cible réelle.

Dans les deux cas, les options sont les même. De base, l'application est chargée (flashée) au lancement du debugger. Un fichier d'initialisation peut être fourni, les autres options ayant peu d’intérêt.

Dans le cas du debugger physique (sonde), un bouton setting permet de régler plus finement les options propres à chaque sonde (choisie dans la liste déroulante)

Dans le cas d'une sonde ULINK Pro (ULINK Pro Cortex Debugger), voilà le genre de fenêtre de réglage

17/23

Sans entrer dans les détails, on voit en haut à gauche des info liées à

Sans entrer dans les détails, on voit en haut à gauche des info liées à la sonde elle-même, ainsi que le mode de debug choisi (ici, via JTAG). En haut, à droite, est indiqué le cible vue par la sonde (ici l'unité CoreSight JTAG du micro-contrôleur). En bas se trouvent d'autres options pour le debug, notamment comment doit être géré le reset.

En ce qui concerne les onglets, l'onglet trace permet d'activer la trace, plus ou moins complète selon la puce et la sonde choisies. Quand à l'onglet « flash download », il permet d'indiquer quel algorithme utiliser lors de la programmation de la flash.

18/23

Ici, on voit que l'algorithme sélectionné correspond à celui pour les puces de densité moyenne

Ici, on voit que l'algorithme sélectionné correspond à celui pour les puces de densité moyenne

(128K)

3.2. Différences concernant la chaîne de compilation GCC

Lors du choix d'une chaîne de compilation GCC plutôt qu'ARM, le paramétrage du projet suis les même règles à ces points prêt:

L'onglet « Target » ne contient pas de réglage particulier à part le choix d'un système d'exploitation et de la vitesse du quartz

Les onglets output, listing, user, assembler et debug sont très similaires à leur version dans quand le chaîne ARM est sélectionnée

L'onglet CC (qui remplace C/C++) est très semblable à son équivalent ARM sauf qu'il faut impérativement sélectionner la case « Compile Thumb Code »: la compilation échouera sinon.

L'onglet « Linker » permet lui aussi de choisir d'utiliser ou non les bibliothèques standards. La grande différence est l'obligation d'utiliser un linker script (équivalent des scatter files pour ARM). Un linker script est présent dans le répertoire « system » du dépôt.

Il faudra penser a configurer Keil pour utiliser cette autre chaine de compilation. Pour ce

faire, cliquez sur le bouton « Folders/Extensions »

ce faire, cliquez sur le bouton « Folders/Extensions » et dans la fenêtre qui s'ouvre, sélectionnez

et dans la fenêtre qui s'ouvre, sélectionnez l'onglet

19/23

Il faudra sélectionner « Use GNU Compiler » et remplir le champ « GNU-Tool-Prefix »

Il faudra sélectionner « Use GNU Compiler » et remplir le champ « GNU-Tool-Prefix » avec « arm-none-eabi- » (attention le '-' à la fin est nécessaire). Le champ « GNU-Tool Folder » sera rempli avec le chemin vers le répertoire « bin » de la chaine de compilation (généralement « C:\Program Files\CodeSourcery\Sourcery G++ Lite »

3.3. Compilation et exécution/debug d'un programme

La compilation du programme se fait en utilisant les icônes

des éléments modifiés) ou

l’édition de lien réussies, le programme peut être soit téléchargé en flash (via l’icône

debuggé (après avoir été téléchargé en flash) via l’icône

(après avoir été téléchargé en flash) via l’icône (pour une compilation uniquement (pour une compilation

(pour une compilation uniquement

en flash) via l’icône (pour une compilation uniquement (pour une compilation totale). Une fois l’opération de

(pour une compilation totale). Une fois l’opération de compilation et

.
.
(pour une compilation uniquement (pour une compilation totale). Une fois l’opération de compilation et . ),

), soit

20/23

4. Arborescence du dépôt SVN

doc: Contient les datasheets, présentations et autres manuels de programmation du micro- contrôleur

drivers: Les drivers des périphériques sont divisé en 4 groupes :

statique: contient les versions des drivers prévus pour être configurés statiquement à la compilation

dynamique: les versions des drivers dont la configuration se fait à l’exécution

cpp : (en travaux): une version objet des drivers

usb: les drivers de base (core) et les implémentations de classe USB. Pour l'instant, seul la classe CDC est disponible. Chaque répertoire contient un répertoire « doc » contenant le manuel d'utilisation des drivers.

lib: Contient une version très compacte de la newlib (implémentation des fonctions définies dans stdio., stdlib.h, string.h, etc …). Nécessaire si l'on utilise la chaîne de compilation GCC.

Os: Contient deux OS temps réel plus ou moins aboutit: trampoline et minos, tout deux implémentant le standard Osek avec plus ou moins de rigueur.

Proj: différents projets pour stm32

system: les fichiers de bootstrap, linker scripts et fichier de définition des registres (stm_regs.h)

Lors de la configuration des projets, outres les drivers, les éléments important à configurer sont:

Rajouter le répertoire « system » dans la liste des répertoires d'include du compilateur: en effet, ce répertoire contient le fichier stm_regs.h, qui contient la définition des registres du micro et sert donc de base a tous les drivers.

Si l'on utilise la minilib se trouvant dans le répertoire « lib », il faut rajouter le répertoire « lib\minilib\include » a la liste des repertoires d'include du compilateur. Il faut ensuite penser a rajouter le fichier « syscalls-template.c » dans le répertoire de son projet (copie physique) et le renommer en syscalls.c avant de la rajouter au projet. Ce fichier sera a adapter au besoin de votre projet. De plus il faut rajouter le répertoire « lib\minilib\lib\arm-cm3 » suivi de la version pour le compilateur choisi (ARMCC ou GCC) dans la liste des répertoires de link du linker. Dans l'onglet « linker » de la fenêtre de paramétrage du projet, cela donne ca (pour GCC):

21/23

22/23

22/23

5. Problèmes connus et corrections

Problème lors du téléchargement du programme. Si lors du téléchargement (Load) une erreur de type “Flash download fail” apparaît, il faut aller vérifier:

Si la chaine de compilation est ARM que dans la fenêtre de configuration du projet que les adresses IROM1 et IRAM1 de l'onglet « target » correspondent aux adresses R/O Base et R/W Base (respectivement) de l'onglet « Linker ». En général, il faut mettre :

R/O Base : 0×8000000 R/W Base : 0×20000000.

Quelque soit le chaine de compilation, il faut aller dans l'onglet « Debug » de la fenêtre de configuration , puis cliquer sur le bouton « settings » de la sonde compilation. Dans la nouvelle fenêtre, aller dans l'onglet « Flash Download » et vérifier que la zone « Program Algorithm » utilise le bon algorithme de programmation ( et n'est pas vide)

le bon algorithme de programmation ( et n'est pas vide) • Le programme arrive sur une

Le programme arrive sur une instruction « BKP » lors du démarrage. Le programme se télécharge bien sur la carte. Mais à l'exécution, le processeur n'atteint jamais le « main » du programme et bloque sur une instruction du « BKP dans la disassembly window. En simulé, pas de pb. Ce problème n'arrive que lorsque l'on utilise la chaine de compilation ARMCC. Vérifier dans la fenêtre de configuration du projet, onglet « Target » que l'option “Use MicroLIB” est bien active. Sans cela, la bibliothèque utilisée en débug fait appel une instruction bkp “break point” qui n'est pas adapté au CM3. En utilisant Microlib l'instruction “bkp” n'est pas présente.

23/23