Outils

Activer la compilation multicœur dans Eclipse CDT

Mon premier article sur ce blog expliquait comment dire à make d’utiliser plusieurs cœurs lors de la compilation. Il suffit d’utiliser l’option -j pour spécifier le nombre de jobs pouvant s’exécuter en parallèle. Si vous utilisez Eclipse CDT et son builder interne, il existe aussi une option activer la compilation multicœur. Je l’ai trouvé par hasard aujourd’hui, elle est dans les propriétés du projet puis C/C++ Build et Behavior :

eclipse-compilation-multicoeur

J’ai étonné que cette option ne soit pas cochée par défaut et j’ai bien sûr immédiatement testé ça. Mon projet n’est pas encore très gros, il n’a que 78 fichiers. En l’activant, je suis passé de 31s.792 ms à 13s.114 ms pour le builder. Wouhou !


Créer son propre archétype Maven

Aujourd’hui, j’ai enfin pris le temps de voir comment créer son propre archétype Maven. L’idée m’était venue en octobre, notamment avec la lecture de cet article, Maven pour les nuls… les archetypes. Avoir son propre archétype permet de créer un nouveau projet en respectant une structure donnée très simplement. Il est ainsi possible d’uniformiser les développements au sein de l’entreprise en fournissant un modèle qui sera commun à tous les projets. Pour cette expérimentation, j’ai choisi de créer un modèle de projet avec une structure ressemblant à celle que pourrait avoir un projet en C sur MCU et dont l’artéfact généré serait un zip contenant l’intégralité du projet. Je travaille dans Eclipse Mars pour plus de faciliter mais vous pourriez très bien faire la même chose avec un éditeur de texte et la ligne de commande.

Création du modèle de projet

La première étape est de créer un projet tel que j’aimerais que Maven le génère avec mon archétype. Une fois cette coquille créée, je demanderai à Maven de générer l’archétype à partir de ce modèle (template, en anglais). Voici à quoi ressemble mon projet :

maven - archetype - 1 - template

La seconde étape est la personnalisation du fichier pom.xml pour générer non pas un jar mais un zip du projet. Pour cela, il faut utiliser le plugin Assembly de Maven. En suivant les conseils de la section Usage, j’ai rajouté l’utilisation de ce plugin, j’ai choisi le mode project et j’ai demandé à ce que la cible qui va bien d’Assembly soit appelée lors de la phase package du projet. Enfin, j’ai changé le type de packaging du projet de jar vers pom pour ne plus générer de jar mais uniquement le zip d’Assembly. Voici le pom.xml :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.gradot</groupId>
    <artifactId>mcu-project-template</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>project</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

Création du projet Maven de l’archétype

À ce state, je possède donc un modèle de projet avec la structure et le packaging souhaités. En exécutant mvn package sur le projet, on constate en effet que le dossier de sortie target contient bien 3 archives (zip, tar.gz, targ.bz2). Il faut donc maintenant créer le projet Maven de l’archétype en lui-même, à partir de ce projet template, grâce à la commande mvn archetype:create-from-project. J’ai essayé de le faire directement avec un launch configuration d’Eclipse mais j’ai obtenu l’erreur suivante :

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:
create-from-project (default-cli) on project mcu-project-template: 
${maven.home} is not specified as a directory: 
'/home/pgradot/Documents/workspace-mars/mcu-project-template/EMBEDDED'. -> [Help 1]

Cela semble être dû à un bug de l’intégration de Maven dans Eclipse. La solution de contournement est simple :  exécuter la commande via le terminal. Le projet Maven de l’archétype est alors disponible dans target/generated-sources/archetype. Pour plus de facilité pour la suite, j’ai créé un projet Eclipse en utilisant une non-default location pointant vers l’emplacement du projet Maven de l’archétype :

maven - archetype - 2 - create eclipse project

Enfin, j’ai rajouté la nature Maven au projet Eclipse en faisant un clic-droit puis Configure / Convert to Maven project. On peut maintenant regarder le contenu de l’archétype et notamment retrouver les fichiers de notre projet template :maven - archetype - 3 - archetype content

Hic ! Les dossiers vides ne sont pas gardés lors de la génération de l’archétype…

Publication et utilisation de ce nouvel archétype

Pour publier l’archétype et ainsi le rendre disponible, il suffit d’appeler la cible install du projet (ou deploy, si les dépôts sont configurés) et l’artéfact de l’archétype se retrouve dans le dépôt local de Maven :

$ ls -l /home/pgradot/.m2/repository/com/gradot/mcu-project-template-archetype
/1.0.0-SNAPSHOT/
total 20
-rw-rw-r-- 1 pgradot pgradot   96 mai   10 08:34 m2e-lastUpdated.properties
-rw-rw-r-- 1 pgradot pgradot  726 mai   10 08:30 maven-metadata-local.xml
-rw-rw-r-- 1 pgradot pgradot 3241 mai   10 08:30 mcu-project-template-archetype
-1.0.0-SNAPSHOT.jar
-rw-rw-r-- 1 pgradot pgradot  988 mai   10 08:24 mcu-project-template-archetype
-1.0.0-SNAPSHOT.pom
-rw-rw-r-- 1 pgradot pgradot  238 mai   10 08:30 _remote.repositories

Je peux maintenant créer un nouveau projet dans Eclipse et demander à Maven d’utiliser mon nouvel archétype (il faut penser à cocher qui va bien la case si l’archétype a été buildé en snapshot, ce qui est le cas ici) :maven - archetype - 4 - create projet

Pour finir je peux constater que j’obtiens un projet semblable à mon projet template (aux dossier vides près… ) et qui se package comme il faut !

maven - archetype - 5 - result


Savoir ce qui prend de la place sur le disque dur de son PC Windows

Il y a quelques années, j’avais écrit un article expliquant comment savoir ce qui prend de la place sur le disque dur de son Mac. Il y a quelques semaines, j’ai eu besoin de faire la même chose sous Windows. Pour pouvoir changer de machine, je souhaitais d’abord sauvegarder les données mais après des années d’utilisation, il y avait des giga et des giga à transférer ! Il fallait faire un peu de tri mais l’éternelle question s’est à nouveau posée : par où commencer ?

Sous Mac, j’utilise Disk Inventory X. J’ai donc demandé à alternativeTo de me trouver une alternative pour Windows et il m’a conseillé WinDirStat. Il est disponible sous licence GLP v2 et est donc gratuit. Il est très léger, le téléchargement et l’installation se font en quelques minutes.

Au démarrage, il nous propose d’analyser tous les disques ou d’en sélectionner certains (et donc d’exclure les autres) :

WinDirStat - sélectionner des lecteurs

Pour l’exemple, je lui ai demandé d’analyser tous les lecteurs. Il mouline un moment :

WinDirStat - work in progress

Enfin, il affiche un graphique d’occupation :

windirstat - done

Les résultats ne sont pas ici très représentatifs car j’ai analysé une machine que je viens d’installer et qui ne me sert que pour le développement…il n’y a donc presque rien dessus. Très logiquement, c’est le dossier Windows qui prend le plus de place et le gros carré rouge en bas à gauche correspond à des fichiers systèmes. Lancez-le chez vous et je suis sûr que vos films, séries, photos et mp3 arriveront en haut du classement ! Bonnes analyses et bon courage pour le ménage.


Imprimer un typon avec Eagle

Quand on a terminé le routage d’une carte et que l’on souhaite réaliser soi-même le PCB, il faut imprimer le typon de cette carte. De nombreux tutoriels sur Eagle utilisent la commande EXPORT pour générer une image et règlent un DPI très élevé pour (soi-disant) obtenir une bonne qualité. Voici un exemple de script trouvé sur Instructables et légèrement adapté :

DISPLAY ALL
RATSNEST
DISPLAY None
DISPLAY Bottom Pads Vias
EXPORT image pcb.png monochrome 600

600 est la valeur du DPI. Pour la carte de mon générateur de signal à 1 Hz, j’obtiens une image de 1117 * 1082 pixels et qui ressemble à ça :

eagle export image

Cette image est une version redimensionnée avec une largeur de 400 pixels. Si vous cliquez dessus, vous pourrez voir l’originale et bien verrez mieux que c’est un peu dégueulasse ! Les contours arrondis des pads sont flous, les bords du plan de masse sont souvent hasardeux, la pointe du plan de masse en bas au milieu part en cacahuète… Ajoutons à cela le fait que l’image n’est pas du tout à l’échelle 1:1 et nous serons d’accord que ceci n’est pas acceptable pour imprimer le typon.

Mais alors que faire ? La bonne solution est d’imprimer, au sens propre, avec File / Print. Bon, en fait, si vous faites ça sans quelques ajustements en plus, vous obtiendrez quelque chose comme ça :

eagle print default

On imprime ce qu’on voit, il nous faut donc au préalable afficher uniquement les couches utiles et remplir le plan de masse. C’est là que le script ci-dessus trouve son utilité en enlevant l’export en tant qu’image :

DISPLAY ALL
RATSNEST
DISPLAY None
DISPLAY Bottom Pads Vias

On peut ensuite imprimer en cochant la case Black :

eagle printer settings

Comme il existe une commande PRINT, on peut écrire un script pour tout faire et ouvrir la fenêtre ci-dessus avec la case Black déjà cochée :

DISPLAY ALL
RATSNEST
DISPLAY None
DISPLAY Bottom Pads Vias
PRINT black

Vous pouvez rajouter un ; à la fin de la dernière ligne pour ne pas passer par la fenêtre et imprimer directement le document. Moi, c’est l’imprimante PDF qui est sélectionné par défaut (en même temps, c’est la seule imprimante installée en ce moment). J’obtiens donc un PDF avec le même nom à côté de mon fichier *.brd. Le typon est à l’échelle 1:1 et la qualité est bien meilleure qu’avec l’export en tant qu’image :

eagle print ok


Simulation de circuits électroniques avec LTSpiceIV

Je ne ferai pas une grande révélation en disant que je travaille sur une horloge à tubes Nixie, plusieurs de mes derniers articles étant consacrés de près ou de loin à ces tubes. J’ai commencé à prototyper le dernier bloc, celui qui pilote les tubes et choisit les chiffres à afficher. Un tube Nixie possède 9 filaments, un par chiffre. Il faut donc être capable d’allumer à tour de rôle chaque filament, ce qui revient à compter de 0 et 9. Il existe un composant adapté pour cela : le CD4017, un decade counter. Il suffit d’avoir un CD4017 par tube et de les cascader pour que le débordement de l’un incrémente le compteur du digit suivant.

Le prototypage d’un tel montage n’est pas exactement évident. La preuve en image :

ltspice prototype

À droite, un premier montage génère la base de temps, un signal carré de fréquence 1 Hz. À gauche, le second montage contrôle les 2 digits des secondes avec 2 CD4017, des LED pour observer l’état des sortie, un bouton pour forcer l’incrémentation des dizaines, un autre bouton pour faire faire un reset. J’ai vidé mon stock de LED, presque vidé mon stock de jumper wires, et je n’ai que le contrôle des secondes. Je ne suis pas prêt de prototyper les minutes et les heures…

La bonne solution est de simuler le montage. J’avais entendu parlé de LTSpiceIV il y a quelques mois. Il est gratuit et je me suis dit que ça pourrait être une bonne alternative à OrCAD de Cadence, que j’ai beaucoup utilisé lors de mes études à l’INSA mais qui coûte cher*. C’était donc l’occasion de tester LTSpice !

*: en fait, j’ai remarqué en écrivant cet article qu’il existe une version lite gratuite d’OrCAD.

LTSpiceIV

LTSpiceIV est un logiciel gratuit de simulation de circuits électroniques. Il est fourni par Linear Technologies et il repose sur SPICE. Il est disponible sous Windows et est peut être utilisé sous Linux grâce à Wine. Il existe aussi une version pour OS X, celle que j’utilise. Elle ne semble pas être au niveau de la version Windows d’un point de vue interface graphique. La barre d’outils étant absente, il faut passer soit par le menu contextuel avec un clic-droit, soit par des raccourcis clavier, notamment des F1, F2… Ces touches sont associées par défaut à des actions du systèmes, donc il faut faire fn + Fi. Pas pratique mais on s’y fait.

linear technology logo

Bibliothèque de la série CD4000

Une installation standard de LTSpice propose une bibliothèque de composants importante mais elle ne contient pas les circuits intégrés de la série CD4000. Il est en revanche facile de les récupérer sur internet via le groupe Yahoo dédié à LTSpice. Il suffit de vous inscrire puis de parcourir les fichiers proposés. Vous y trouverez beaucoup beaucoup de choses et, notamment, vous y trouverez une bibliothèque avec les composants de la série CD4000 dans Files > Lib > Digital CD4000. Il suffit de télécharger CD4000_v.lib et CD4000.zip. Le zip contient de nombreux fichiers *.asy, des symboles pour LTSpice.

Simulation

LTSpice stocke le schéma à simuler dans un fichier *.asc. Une solution simple pour utiliser des composants de la bibliothèque CD4000 est d’extraire du zip les fichiers *.asy qui nous intéresse et les mettre dans le même dossier que le fichier *.asc. Il faut aussi placer le fichier CD4000_v.lib dans ce dossier. Enfin, on rajoute une directive d’inclusion dans le schéma : .include cd4000_v.lib. Quand on ajoute un composant à son schéma, on peut choisir soit le dossier standard des symboles soit le dossier courant pour accéder aux fichiers *asy placés à côté de son fichier *.asc.

Mon objectif pour commencer était de simuler le contrôle des chiffres des secondes et j’ai donc réalisé le montage suivant (cliquez pour agrandir) :


ltspice schema

Il contient les 2 CD4017 (un par digit des secondes), une source continue pour l’alimentation, une source pulse pour simuler le signal carré de base de temps normalement fourni par un autre montage, une seconde source pulse pour simuler un appui sur un bouton poussoir qui reset les compteurs au tout début de la simulation, et enfin un peu de logique de contrôle. Les diodes servent à faire des OU logiques entre les sources de reset des CD4017.

En haut à gauche, on retrouve la direction d’inclusion ainsi que la commande pour la simulation. Il s’agit ici d’une transient analysis, qui va réaliser une simulation en temps. On simule 130 secondes de fonctionnement et on regarde ce qu’il se passe. Je trouve un peu dommage que la commande d’analyse soit « en dur » dans le schéma car cela oblige à éditer le schéma quand on souhaite changer les paramètres mais je n’ai pas vraiment regardé la documentation du machin. Pour lancer la simulation, il suffit de cliquer sur le bouton Run. Une nouvelle fenêtre s’ouvre, ça calcule et on peut y ajouter des « mesures », ce qui consiste en fait à tracer des courbes grâce aux valeurs calculées. Voici un exemple d’affichage de différents signaux pour vérifier mon montage fonctionne comme souhaité (à nouveau, cliquez pour avoir la version grand format) :


ltspice simulation

Au revoir les fils et les LED, bonjour la simplicité !

Sources

Les fichiers sont partagés dans mon dépôt Git Nixie, dans le dossier LTSpice Simulation. J’ai depuis rajouté la simulation des minutes et je vais m’attaquer à celle heures. Si vous souhaitez récupérer la version montrée ici, allez dans les releases de Github et récupérer la release 1.2.

Liens utiles

Le wiki non-offciel de LTSpice : http://ltwiki.org/

Le groupe Yahoo! dédié à LTSpice : https://groups.yahoo.com/neo/groups/LTspice/info

Le livre « Le simulateur LTspice IV – 2e éd », par Gilles Brocard : https://books.google.fr/books?id=J48zQHKnyioC

Les raccourcis claviers pour la version Mac : http://cds.linear.com/docs/en/software-and-simulation/LTspiceShortcutsForMacOSX.pdf

La page des logiciels de Linear Technology, avec les liens vers la doc, le blog, les installateurs, etc. : http://www.linear.com/designtools/software/