Archive for category C & C++

Perfs : factoriser les if() au runtime grâce aux templates

Une petite bidouille que j'ai été amené à faire et qui je pense vaut le coup d'être partagée : je me suis retrouvé à devoir effectuer un même traitement sur un nombre important d'éléments (ex : on parcourt tous les pixels d'une image pour changer la luminosité...), mais je voulais pouvoir effectuer certaines parties de mon traitement de manière optionnelle, suivant certaines options de configuration. En gros, j'avais quelque chose sous la forme :

for e in elements
   if bOption1
      traitement 1
   if bOption2
      traitement 2

Ce qui est plutôt mauvais d'un point de vue performances (on fait des tests pour rien, et les sauts conditionnels c'est pas ce qu'il y a de mieux non plus).
Idéalement, je voudrais que la résolution des conditions bOption1 et bOption2 soit faite en dehors de la boucle, et que la boucle n'effectue que les traitements qui m'intéressent.

Read the rest of this entry »

, , ,

No Comments

Utilisation de l'API Stax de libXML2

Pour charger un fichier XML, il y a traditionnellement deux API : Sax et DOM

* Sax oblige a écrire plein de callbacks. Ca fait tout ce dont on peut avoir besoin, mais c'est assez lourd à coder.
* DOM chargeant tout en mémoire, ce n'est pas adapté pour les gros fichiers.
Read the rest of this entry »

1 406 Comments

Interfacage Assembleur / C++

Un autre vieux tuto : comment accéder à vos structures C++ à partir de l'assembleur.
Read the rest of this entry »

1 391 Comments

Tutoriel Boost Graph Library

Boost, c'est le bien, et la BGL ne fait pas exception à la règle. BGL permet d'utiliser des algorithmes de graphes précodés en l'adaptant à nos besoins via les templates, et économise beaucoup de temps de développement et de debug.
C'est bien beau, mais encore faut-il que les puissants concepts utilisés pour faire fonctionner la librairie soient bien documentés. Or, la documentation de la BGL est tout simplement ignoble :
Read the rest of this entry »

, , ,

3 Comments

Préprocesseur et énumérations : la suite.

Cet article fait suite à mon premier article intitulé "Faire un peu joujou avec le préprocesseur"
(disponible ici : http://www.coder-studio.com/blog/preproc/ ).

Pour rappel, nous en sommes restés à un système de macro qui permettait d'automatiser la création
d'un opérateur "< <" pour iostream, capable d'afficher le nom d'une énumération.

Read the rest of this entry »

, , ,

2 710 Comments

Faire un peu joujou avec le préprocesseur...

Ça faisait un bail que je n'écrivais pas sur Coder-Studio...
Chose réparée :)

Du 17 au 19 avril 2009, a eu lieu la finale de Cod'INSA, un concours de programmation inter-INSA,
qui s'est déroulée à l'INSA de Toulouse (plus d'infos sur http://codinsa.insa-lyon.fr pour les intéressés).
Faisant partie des organisateurs, j'ai eu à faire l'interfaçage C++/Java (oui parce qu'il y en a qui veulent
participer en Java...allez comprendre :p [/troll]). J'y ai découvert les joies de GCJ et de CNI, ce qui
pourra peut-être être l'objet d'un autre article, selon ma motivation...

Bref, tout ça pour dire qu'il m'a fallu interfacer une librairie écrite en C avec du Java, et qu'il a fallu
automatiser un peu le boulot pour la partie concernant les énumérations.

Dans cet article, je vais illustrer une méthode pour faciliter l'affichage des valeurs des énumérations.
En gros, le but, c'est que si l'on a :

MonEnumeration e = E_VAL_1;
std::cout < < e << std::endl;

il s'affiche alors à l'écran "E_VAL_1".

Read the rest of this entry »

, ,

9 Comments

Interface GSM sur système Linux embarqué

Carte Fox

Carte Fox

J'ai été amené à travailler dans le cadre de mes études sur un petit projet de développement d'une Interface GSM sur un système Linux embarqué. Ayant découvert la puissance du système, j'ai pensé vous faire part de mes découvertes sur l'utilisation de cette carte.

Dans mon cas le principe était de créer un système autonome d'envoi de SMS aux étudiants de mon école. L'idée étant de pouvoir envoyer les résultats des examens directement par SMS aux étudiants, ce qui est ma foi fort sympatique :)

Le Matériel

Alors, tout d'abord : Carte FOX Késako !? Il s'agit d'un système embarqué à bas coût utilisant le système d’exploitation Linux. La carte est dotée d’un processeur AXIS à 100MHz et de 32 MB de RAM, de connectiques USB, Ethernet, d’un port série console ainsi que 40 pins pouvant être reliées à plusieurs BUS de données. Elle permet de développer en bon nombre de langages : C, C++, PHP, PYTHON, Shell, … et permet des connections HTTP, FTP, SSH et TELNET. De petite taille et faible consommation électrique (1 W) est idéale pour mettre en place rapidement des projets de type embarqué.

Modem GSM

Modem GSM

Le modem GSM utilisé ici est un modem de la marque Telit. Il est relié à la carte FOX par l’intermédiaire d’une carte d’extension. La carte FOX peut communiquer avec le modem par l’intermédiaire du port série /dev/ttyS2. Une simple utilisation de carte SIM classique permet de se connecter au réseau GSM. Il est possible de trouver cette carte seule sur le site d'ACME SYSTEMS à 176 € frais de port tout compris. Si l'on ajoute le kit GPRS cela monte jusqu'à 626 €, ce qui commence déjà à faire beaucoup. Je pense qu'une solution plus abordable serait de relier la carte basique à un téléphone portable pour communiquer en série étant donné que dans notre cas nous n'avons pas besoin de tous les éléments de la carte d'extension.

Les modems GSM utilisent un protocole de commandes appelées "commandes AT". Chaque constructeur fait un peu ce qu'il veut avec ses normes, ce qui fait que chaque modem est plus ou moins différent et qu'il faut se référer à la doc du constructeur. Ces commandes AT sont donc envoyées via le port série pour soumettre différentes commandes au modem. On peut notamment dans notre cas manipuler et envoyer des SMS par l’intermédiaire de celles-ci.

Read the rest of this entry »

, , , , ,

1 886 Comments

Introduction à wxWidgets

I) Présentation

wxWidgets est une librairie open source dont le but 1er est de permettre de créer des interfaces graphiques pour ses programmes (fenêtres, boutons...etc). Elle est portable mais les applications crées avec ont la particularité d'adopter le "look and feel" (apparence) de la plate-forme sur laquelle elles ont été compilées. Cela est dû au fait qu'en interne, wxWidgets utilise l'API propre à chaque plate-forme (API Win32 ou juste GDI sous Windows, GTK+, Motif ou directement X11 sous Linux et autres UNIXs, Carbon ou Cocoa sous Mac...). Cependant, l'équipe de wxWidgets a également mis sur pied une version spéciale de wxWidgets, wxUniversal, qui compile sous Windows, Linux et certains périphériques embarqués, et qui s'occupe entièrement de l'affichage (le "look and feel" natif de la plate-forme n'est pas forcément respecté).

Cependant, wxWidgets ne se limite pas à permettre la création d'interfaces graphiques, elle est capable de faire beaucoup d'autres choses; elle possède ses propres classes de tableau, tables de haschage, liste chaînée, elle permet de créer des applications utilisant les sockets (connections réseau), d'intégrer une zone dédiée à OpenGL dans une fenêtre pour pouvoir faire du dessin en 3D, de faire des manipulations de chaînes grâce à la classe wxString, contient une sous-librairie, wxHTML, qui permet de visualiser une page HTML, possède son propre système d'aide semblable aux CHM de Windows, peut utiliser des ressources au format XML, peut utiliser des bases de données...etc.

Et tout cela est gratuit et portable, pourquoi s'en priver ? ;)

Read the rest of this entry »

,

2 213 Comments

Les Bases du langage C

Introduction

Je suppose que si vous êtes arrivé jusqu'à cette page web, soit vous vous êtes perdu soit vous voulez vraiment apprendre à programmer en langage C ^^. Si vous êtes dans ce cas, bienvenue chez les programmeurs ! Alors, qu'est-ce que le C ? Le C est un langage de programmation; on écrit un programme dans ce langage, et ensuite le texte que vous avez tapé est converti par un "compilateur" en langage binaire 0 et 1 compréhensible par le processeur de votre ordinateur (un fichier .exe). Donc, pour commencer, il vous faut un compilateur et un éditeur (le bloc-notes peut suffire comme éditeur mais il y a beaucoup mieux ;) ). Un environnement qui intègre et compilateur et éditeur est appelé IDE (Integrated Development Environment). La plupart de ceux que je vais vous proposer sont des compilateurs C++. Qu'est-ce que le C++? C'est un autre langage, mais qui en réalité est compatible avec le C (un programme écrit en C peut se compiler avec un compilateur C++ mais pas l'inverse). Le C++, c'est donc tout le C, mais avec des notions supplémentaires (templates, objets, surcharge de fonctions...). Le C et le C++ sont définis par les normes ANSI/ISO (ce sont des organismes de normalisation, en gros ils donnent les règles que doit respecter un compilateur pour pouvoir être présenté comme un compilateur C ANSI ou C++ ANSI).

Read the rest of this entry »

, , ,

1 382 Comments

La factory

La Factory, brrr

Dans ce tutorial, je vais tenter d'aborder le design pattern factory (fabrique pour les anglophobes).
A mon habitude, nous allons retrouver la même ligne directrice que pour les précédents tutoriaux.
Je vais commencer par expliquer brièvement le principe de la factory, ensuite en découlera une première implémentation en C++ et enfin on essayera de rendre ça le plus générique possible.

Read the rest of this entry »

, ,

1 Comment