Builder un projet Keil uVision en ligne de commande

J’utilise souvent Keil uVision (4 et 5) dans le cadre du travail. Aujourd’hui, j’ai souhaité pouvoir builder mon projet Keil depuis Eclipse pour pouvoir automatiser le déploiement de mon applicatif sur la carte. Il y a plusieurs étapes dans ce processus :

  1. Compiler mon application Java pour générer un fichier objet à destination de Keil.
  2. Builder le projet Keil pour obtenir un fichier exécutable ELF.
  3. Découper mon fichier ELF en deux fichiers binaires, un pour la flash interne, l’autre pour la flash externe.
  4. Programmer ma carte avec ces 2 fichiers binaires grâce au ST-Link Utility. Cette étape est en fait double car il faut programmer la mémoire interne puis la mémoire externe en sélectionnant à chaque fois le bon fichier.

La première étape est un bête launch configuration d’Eclipse. Les étapes 3 et 4 étaient déjà automatisées grâce à des scripts Ant. Il me restait donc cette étape 2 qui m’obligeait à quitter Eclipse pour aller dans Keil et à cliquer sur le bouton Build.

Pour automatiser cela, il suffisait de trouver la bonne ligne de commande pour appeler Keil et lui dire de builder mon projet. Le site de Keil dédie une page à l’utilisation en ligne de commandes : Keil uVision User’s Guide: Command Line. J’avais donc besoin de l’option -b pour demander de builder le projet. Mon projet ne contient qu’une seule target mais dans le doute (ou histoire de faire bien), je l’ai quand même précisé. La target Ant résultante ressemble à ceci (les noms des propriétés sont explicites, je ne pense pas avoir besoin de vous les montrer) :

<target name="build" description="build Keil project">
	<echo>Building Keil project...</echo>
    <exec executable="${keil.dir}/UV4/UV4.exe">
    	<arg line="-b ${keil.uvprojfile} -t&quot;${keil.target}&quot;"/>
    	<!-- You may add the -j0 option to the above argument line to hide Keil's UI -->
    </exec>
</target>

J’ai eu un problème dont la résolution mérite d’être retenue. Lors de l’appel à ce script, tous les fichiers du projet étaient recompilés même si rien n’avait changé. Normalement, c’est l’option -r qui devrait avoir cet effet. Cette discussion sur le forum Keil m’a aidé à résoudre le problème. La personne avait un problème similaire car le fichier de dépendance de son projet était en lecture seule dans le gestionnaire de sources. Il se trouve que mon projet était dans un dépôt Git et donc ce fichier était versionné, mais il n’était pas en lecture seule. Je l’ai ajouté à l’ignore list et le problème a disparu.

J’avais presque fini : il ne me restait plus qu’à faire un launch group dans Eclipse pour enchainer mes 3 launch configurations (1 programme Java et 2 programmes Ant). J’ai mis un petit moment à comprendre qu’il me fallait choisir Wait until terminated pour empêcher les 2 scripts Ant de s’exécuter en parallèle après avoir sagement attendu que l’application Java soit exécutée complètement.

build keil - launch groupEt voilà ! Je builde un 2 clics maintenant 🙂

J’en profite pour vous dire de toujours automatiser au maximum vos builds ! On a souvent l’impression que trouver un moyen d’automatiser va être plus long que le temps cumulé à réaliser les étapes manuellement. On se dit qu’après tout, on ne devrait pas le faire si souvent, que le projet ne devrait pas être trop long et que ce sera supportable. C’est faux ! Au-delà du fait que réaliser plusieurs étapes manuellement est atrocement pénible, c’est un risque de se tromper et perdre du temps. Ensuite, vous passerez plus de temps que vous ne le pensez à builder à la main. Enfin, ce que vous avez fait pour de précédents projets sera sûrement utilisé pour les projets suivants et vous passerez de moins en moins de temps à automatiser. J’ai souvenir d’un projet où, au bout d’un mois, j’ai écrit un script pour automatiser un processus similaire à celui décrit plus haut, où tout était manuel : ça a changé ma vie et j’ai regretté de ne pas l’avoir plus tôt !

N’hésitez plus, scriptez, automatisez, simplifiez vous la vie !

Publicités

5 Réponses

  1. pulkomandy

    xkcd a deux graphiques pour savoir si ça vaut le coup d’automatiser une tâche:

    https://xkcd.com/1319/

    https://xkcd.com/1205/

    J'aime

    9 juin 2015 à 5:47

    • Faut-il comprendre que cela ne vaut pas le coup d’automatiser ?

      J'aime

      18 juin 2015 à 8:22

      • pulkomandy

        ça dépend, le deuxième lien donne un tableau à double entrée. Si ton automatisation te fait gagner 5 minutes sur une tâche que tu fais 5 fois par jour pendant 5 ans, alors c’est rentable de passer jusqu’à 4 semaines sur l’automatisation. Mais si au bout de 4 semaines tu n’as pas fini, alors c’est du temps perdu 🙂

        J'aime

        18 juin 2015 à 8:42

      • Je discutais avec un ancien collègue aujourd’hui, il me disait qu’il avait bien aimé ton commentaire tout en haut, avec les graphes xkcd.

        On se disait aussi que tu ne prenais pas en compte (et moi non plus dans l’article) des aspects importants de l’automatisation :
        – la santé mentale à faire une tâche répétitive et pénible
        – la réduction du risque d’erreur
        – la simplicité pour d’autres personnes d’arrivant sur le projet d’utiliser le processus automatisé

        🙂

        J'aime

        21 juillet 2015 à 9:08

  2. ça dépend, dans le tableeau de xkcd le point d’entrée est « combien de temps tu gagnes ». On peut compter le temps strictement gagné, ou alors aussi le temps perdu à procrastiner pour ne pas faire une tâche chiante (tu l’as dit toi même je crois, on part prendre un café pendant que ça prend 5 minutes à flasher, et au bout de 10 minutes on revient et on s’apperçoit que ça a planté au bout de 30 secondes), le temps perdu à réparer les erreurs, le temps perdu par d’autres personnes à comprendre le truc, etc.
    Le tableau est pratique pour justifier le temps passé à automatiser auprès du management qui veut que ça soit livré pour hier; le reste, ça vient en bonus 🙂

    J'aime

    21 juillet 2015 à 10:13

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s