Compilation en mode statique : avantages, inconvénients et mise en œuvre

La plupart du temps, lorsque vous compilez un programme avec g++, votre exécutable est en mode dynamique. Ainsi lorsque vous lancez votre exécutable, celui-ci va charger les bibliothèques qui contiennent le code des fonctions que vous n’avez pas codées (par exemple la méthode cout). Ces bibliothèques dynamiques sont des fichiers « .so » sous GNU/Linux ou « .dll » sous Microsoft Windows.

Lorsque vous compilez un programme en mode statique, le code des fonctions externes est inclus dans l’exécutable final. Vous ne dépendez plus alors de bibliothèques externes, votre exécutable est autonome.

Détaillons un peu plus ce qui précède…
Imprimer cet article Imprimer cet article
Lire la suite

Compilation croisée ou compilation à distance ?

Tout d’abord il faut définir ces deux termes :

  • la « cross compilation » ou compilation croisée est le fait de compiler un programme sur une architecture qui n’est pas celle de l’architecture cible. Exemple : vous êtes sur un PC avec un processeur de type Intel en 64bits (architecture LittleEndian) et vous souhaitez compiler pour un RaspberryPi ou une BeagleBoneBlack qui utilise une architecture 32 bits de type ARM (architecture BigEndian). Vous disposez ainsi de toute la puissance et du confort d’une station de travail. Le problème est qu’il faut disposer d’un compilateur croisée.
  • le « remote developpement » ou développement à distance est le fait de saisir son code sur une station de travail performante dans un EDI puis de le transférer et de la compiler sur la cible. Cette technique est plus simple à mettre en œuvre que la précédente mais elle est moins performante car vous compilez sur l’architecture cible qui généralement à des ressources en mémoire et puissance processeur relativement faible.

Dans la suite de cette article, vous mettrez en œuvre ces deux solutions.

Lire la suite

RaspberryPi à tout faire…

Un titre un peu fourre tout car en effet le sujet est vaste…Cet article présente les bases de l’installation d’un RaspberryPi et sa configuration de base. Puis nous allons tester les différentes possibilités d’E/S SANS programmation : E/S TOR (GPIO), bus 1Wire, bus I2C, voie série,bus SPI. Puis nous passerons à la programmation en langage C à l’aide de la bibliothèque WiringPi de Gordon Henderson. Enfin nous terminerons par la création d’une page web qui dialoguera avec ces différents bus grâce à un script CGI. Bref que du bon… Lire la suite

Horloge RTC gérée par le noyau Linux sur RaspberryPi

Vous savez sans nul doute que le RaspberryPi n’est pas équipé d’une horloge temps réel pour des raisons de coût. La distribution Raspian a fait le choix de récupérer l’heure sur Internet quand la carte est connecté sinon elle repart avec la dernière heure connu (fake_hwclock). Bien sur ce n’est pas satisfaisant…aussi vous trouverez sur le grand « n’Internet » nombre de site qui décrive comment rajouter une RTC (principalement en I2C). J’ai même fait quelques lignes la-dessus à la fin de l’article sur l’I2C sur Raspberry. Cependant je voudrais faire « encore mieux », en particulier que la partie « user space » (espace utilisateur) ne gère pas cette RTC mais que le noyau s’en charge de A à Z. Cette article décrit cette mise en oeuvre.

Lire la suite

Utilisation du bus I2C sur RaspberryPi

Dans la suite de l’article je présente l’activation puis l’utilisation du bus I2C sur la carte RaspberryPI (ou tout autre carte qui supporte un bus I2C : Olimex A13 ou iMX233, Beagle/PandaBoard de TI, TQ6410, etc…). L’interrogation des esclaves connectés au bus I2C peut se faire sans aucune programmation ! Cela permet de valider rapidement l’écriture ou la lecture des registres d’un esclave I2C. On peut alors passer à la programmation en C/C++ avec des valeurs validées. Lire la suite

Installer une chaîne de cross-compilation pour µP ARM sur une Debian Squeeze (6.0) ou Wheezy (7.0)

De plus en plus de cartes électroniques à bas coût sont disponibles sur le marché de l’embarqué. Dans quasiment tous les cas elles sont équipées d’un coeur ARM. Par exemple, le RaspberryPi (ARM11 : architecture armv6) ou les cartes Olinuxino (ARM9 (armv5) pour la iMX233 et Cortex A8 (armv7) pour la carte A13) utilisent des processeurs ayant un coeur ARM. Suivant le processeur utilisé, celui-ci peut posséder une unité de calcul en virgule flottante. Nous aurons donc à installer une chaîne de cross-compilation qui supporte ou pas l’unité de calcul en virgule flottante. Sur Debian, le projet emdebian propose des cross-compilateurs pour les architectures précédemment cités.
Imprimer cet article Imprimer cet article
Lire la suite

Prise en main du compactRIO-9074 de National Instrument

Le NI cRIO-9074 (Système avec contrôleur temps réel 400 MHz intégré et FPGA 2 millions de portes) équipe désormais tous les lycées ayant des sections STI2D SIN. De plus il est livré avec trois modules d’acquisition :

  • le NI9201 : Module d’entrée analogique 8 voies, ± 10 V, 500 kéch./s, 12 bits
  • le NI 9263 : Module de sortie analogique 4 voies, 16 bits, 100 kéch./s, ±10 V
  • le NI 9401 : Module d’E/S numériques bidirectionnelles haute vitesse 8 voies, TTL 5 V
  • Documentation au format PDF de ces trois modules : docs_modules_9201_9263_9401

Nous allons donc réaliser la mise en œuvre de cet appareil dans les pages suivantes.

Imprimer cet article Imprimer cet article

Lire la suite

Gestion des « GPIO » – E/S Tout Ou Rien (TOR) sur la carte TQ6410

Pour un projet industriel, nous devons gérer 8 entrées/sorties tout ou rien (TOR). Le noyau Linux, s’il est correctement configuré et compilé permet de gérer ces E/S au travers d’une interface de type fichier. Les notes qui suivent permettent de gérer ces E/S.

Lire la suite