jeudi 31 décembre 2009

Activités 2009

Résumé : AJOLLY testing a évolué en 2009, avec une expertise en développement logiciel et analyse de systèmes. L’étude sur le développement de logiciels pour bancs d’essai sous LabVIEW, LabWindows/CVI, et Visual Studio .NET C#. L’optimisation des communications GPIB sur un synchrotron a été réalisée grâce à la programmation C++ sur Linux et JAVA. Ces projets témoignent de notre engagement pour la précision et le partage de connaissances techniques. Notre conférence sur la migration logicielle a mis en avant notre leadership dans le domaine technique. 


En 2009, AJOLLY testing a consolidé son expertise en test et mesure par des contributions significatives dans le domaine du développement logiciel et de l’analyse de systèmes complexes. L’étude comparative que nous avons menée sur le développement de logiciels pour bancs d’essai de production a mis en lumière notre maîtrise des technologies telles que LabVIEW, LabWindows/CVI et Visual Studio .NET C# avec Measurement Studio. De plus, notre travail d’analyse sur un synchrotron de troisième génération a démontré notre capacité à optimiser les communications GPIB, grâce à notre savoir-faire en programmation C++ sur Linux et en développement de serveur d’instruments JAVA. Ces initiatives reflètent notre engagement envers la précision et l’efficacité, sans pour autant négliger l’importance de partager notre savoir avec la communauté technique.

  • Étude technique et financière comparative sur le développement de logiciels pour banc d’essai de production : Dans le cadre de notre collaboration avec Alcatel-Lucent, nous avons réalisé une étude technique et financière comparative approfondie sur le développement de logiciels pour bancs d’essai de production. Ce projet a impliqué l’utilisation de LabVIEW, LabWindows/CVI et Visual Studio .NET C# avec Measurement Studio. Nous avons conclu ce projet par une conférence enrichissante, au cours de laquelle nous avons présenté des illustrations d’exemples de migration à des experts et leaders techniques d’Alcatel-Lucent. 
    • Techniques utilisées : LabVIEW, LabWindows/CVI et Visual Studio .NET C# avec Measurement Studio.
    • Lieu : France
    • Analyse des pertes de mesure sur un synchrotron de troisième génération : Notre équipe a mené une analyse poussée des pertes de mesure sur un synchrotron de troisième génération, aboutissant à une optimisation significative de la communication GPIB, tant sur le plan matériel que logiciel. Ce travail a nécessité une expertise particulière en programmation C++ sur Linux et en développement de serveur d’instruments JAVA. 
      • Techniques utilisées :C++ sur Linux, serveur d’instruments JAVA. GPIB.
      • Lieu : France

      mardi 15 décembre 2009

      Comment choisir entre LabVIEW, LabWindows/CVI, Measurement Studio .NET et TestStand

      Résumé : National Instruments, leader en solutions d'instrumentation et de mesure, propose LabVIEW, LabWindows/CVI, Measurement Studio et TestStand pour le développement logiciel. LabVIEW utilise le langage G graphique pour un développement rapide, tandis que LabWindows/CVI et Measurement Studio facilitent la programmation en C et C++/VisualBasic/C# respectivement. TestStand, compatible avec plusieurs langages, optimise le développement de séquenceurs avec des fonctionnalités comme la génération de rapports et la gestion des droits utilisateurs.

      National Instruments, qui est actuellement le leader des solutions d’instrumentation, test et mesure, propose des solutions pour le développement de logiciels dans trois langages différents : LabVIEW, LabWindows/CVI et Measurement Studio; et un autre logiciel de développement spécialisé : TestStand. Mais, j’en convient et surtout vu de l’œil du non initié, on peut être un peut perdu face à toutes ces solution. Aussi, je vais faire une courte présentation de ces produits avec leurs différences et leurs points forts.

      LabVIEW logo LabVIEW

      LabVIEW est le produit phare de National Instruments depuis 1984.

      • Utilisation : développement de logiciels orientés industrie et science, le plus souvent fortement liés aux instruments de mesure, capteurs et appareils électroniques, sous Windows, Unix, Linux ou Macintosh, PDA (Windows Mobile et Palm OS), cible temps réel (de NI), FGPA (de NI).
      • Langage : langage G pour Graphique. On programme en posant des icones (représentant des fonctions) sur un diagramme et on les relie par des fils (représentants les flux de données, les variables).
      • Avantage : le langage G, entièrement graphique, permet de développer très rapidement des applications sans connaissance étendu de la programmation.

      LabWindows/CVI logo LabWindows/CVI

      LabWindows/CVI est une déclinaison de LabVIEW pour la programmation en langage C.

      • Utilisation : développement de logiciels orientés industrie et science le plus souvent fortement liés aux instruments de mesure, capteurs et appareils électroniques, sous Windows, Unix, Linux et cible temps réel (de NI) - depuis la version 9.0 pour ce dernier point.
      • Langage : langage C. LabWindows/CVI contient bon nombre d’assistant pour faciliter le développement d’interfaces graphiques, la déclaration des variables, l’insertion de fonctions et structure du code et la communication avec les instruments et autres appareils électroniques.
      • Avantage : le langage C est un langage de base souvent connu des ingénieurs et techniciens. C’est un langage majeur qui permet l’utilisation de code source déjà existants. La programmation est facilité grâce aux assistants.

      Measurement Studio logo Measurement Studio

      Measurement Studio est un pack de classes et librairies similaires à LabVIEW pour Visual Studio.

      • Utilisation : développement de logiciels orientés industrie et science le plus souvent fortement liés aux instruments de mesure, capteurs et appareils électroniques, sous Windows.
      • Langage : langages C++, C# et Visual Basic.
      • Avantage : facilite le développement d’applications d’instrumentation et de mesure sous Visual Studio grâce à ses librairies de fonctions dédiées et ses objets graphiques spécialisés.

      TestStand-Logo TestStand

      TestStand est un outil, ou plus exactement une suite de fonctionnalités, ou Framework, permettant de faciliter le développement de logiciels de type séquenceur.

      • Utilisation : développement de séquenceurs dans les domaines de l’industrie et des sciences, le plus souvent pour le séquencement de mesures et de tests sous Windows.
      • Langage : compatibilité avec LabVIEW, LabWindows/CVI, Java, HTbasic et tous langages produisant des DLL, EXE, des composants ActiveX et .NET. TestStand possède également son propre langage simple de script.
      • Avantage : il possède toutes les fonctions nécessaires à un séquenceur de tests; c’est autant de temps de gagné sur le développement. Il dispose, entre autres, des fonctions suivantes : génération de rapports, éditeur de séquence, génération automatique de code source, connexion aux bases de données, parallélisme, composants graphiques pour l’interface opérateur, gestions des droits des utilisateurs.

      dimanche 8 novembre 2009

      Conférence sur le test et mesure au Mexique

      J’ai été invité pour donner une conférence dans le cadre du SIECC 2009 de titre “Fusing Worlds”, symposium international étudiant de science informatique sur trois jours, organisé par Institut Technologique de Durango au Mexique.

      12652_169092777849_107759907849_2596261_4426841_n

      Le titre de ma conférence était “La mécatronique dans la qualité industrielle et la recherche scientifique” où j’ai exposé les enjeux du contrôle, de la mesure, du test et de la simulation dans des problématiques de plus en plus complexes au sein de la recherche et de l’industrie, agrémentée de d’exemples tirés de mon expérience professionnelle.

      16649_179577636768_533411768_2849826_1199836_n16649_179577671768_533411768_2849831_2633575_n

      Entre autres conférenciers, on pouvait compter Leo Prieto (leo.prie.to), un chilien qui est à la tête de Fayerwayer.com premier site d’Amérique latine avec 4 millions de visiteurs par jour, pour parler de l’hyper connectivité; Álvaro López Ortega (Octality), espagnol, créateur du serveur libre “Cherokee”,  pour présenter les modèles économiques applicables pour une entreprise développant en Open Source; Ricardo Meza, mexicain, membre de Mozilla, pour nous parler de FireFox et de l’Open Source; Mauricio Pastrana, colombien, pour nous parler des enjeux économiques des communautés du web; Alejandro Martinez, mexicain, membre de Microsoft pour nous présenter les nouvelles innovations technologiques de Microsoft; et Carlos Montelongo pour parler des applications JAVA. Ci-dessous une photo des conférenciers :

      11440_167937514139_558214139_2568405_2940484_n

      voir le site de l’évènement : siecc09.com

      lundi 10 août 2009

      Nouvelles fonctions de LabVIEW 2009

      Résumé : LabVIEW 2009 (version 9.0) a introduit des améliorations significatives, notamment dans les commandes de face avant et les fonctions de diagramme. Parmi les nouveautés, on trouve des commandes numériques de type réservoir, des graphes 3D avancés, et des palettes enrichies pour la programmation numérique et les matrices. La gestion de la mémoire et les informations sur le processeur ont été optimisées, et de nouvelles fonctions pour les variables partagées et le moteur de balayage NI ont été ajoutées, facilitant ainsi la synchronisation et la gestion des défaillances. Ces évolutions visent à améliorer l'efficacité et la clarté du développement sous LabVIEW.

      labview2 LabVIEW 2009 vient de sortir (on notera que le numéro de la version est en faite la 9.0). En plus des nouveautés annoncées par National Instruments sur son site, j’ai voulu faire un tour d’horizon des nouveautés dans les palettes de commandes en face avant et de fonctions pour les diagrammes. En voici la synthèse (les nouveautés sont encadrées en rouge :

      Nouveautés dans les commandes (face avant)

      • Numérique
      labview2009-moderne-numerique ajout de la commande de type réservoir
      • Graphe
      labview2009-moderne-graphe ajout du tracé de compas, tracé à barres d’erreur, tracé de plume et matrice de tracés XY et ajout de la palette dédiée au graphe 3D
      • Graphe 3D
      labview2009-moderne-graphe-graphe-3d ajout des graphes 3D de type nuage, barres, camembert, bâtons, rubans, contour, champ vectoriel, comète, surface, maillage et chute d’eau.

       

      Nouveautés dans les fonctions (diagramme)

      • Programmation, numérique, virgule fixe
      labview2009-programmation-numerique-virgule-fixe ajout de : adapter de virgule fixe à entier, adapter d’entier à virgule fixe
      • Programmation, tableau, matrice
      labview2009-programmation-tableau-matrice nouvelle palette avec : taille de matrice, construire une matrice, redimensionner une matrice, transposée d’une matrice, obtenir la diagonale d’une matrice, obtenir les éléments d’une matrice, obtenir une sous-matrice, définir une diagonale de matrice, définir des éléments de matrice, définir une sous-matrice
      • Programmation, cluster, classe et variant
      labview2009-programmation-cluster-classe-et-variant ajout de préserver la classe à l’exécution
      • Programmation, E/S sur fichiers, constantes de fichiers
      labview2009-programmation-es-sur-fichiers-constantes-de-fichiers ajout de : obtenir le répertoire système et répertoire de l’application
      • Programmation, E/S sur les fichiers, XML, parseur XML
      labview2009-programmation-es-sur-fichiers-xml-parseur-xml
      • ajout de : obtenir le premier nœud correspondant et obtenir tous les nœuds correspondants.
      • à noter le changement des icones nouveau et fermer.
      • Programmation, E/S sur les fichiers, TDM en continu
      labview2009-programmation-es-sur-fichiers-tdm-en-continu ajout de : TDMS – convertir le format, créer des informations de mise à l’échelle
      • Programmation, contrôle d’applications, contrôle de mémoire
      labview2009-programmation-controle-applications-controle-de-memoire ajout de : nouvelle référence de valeur de données, supprimer une référence de valeur de données
      • Programmation, contrôle d’applications, informations sur le processeur
      labview2009-programmation-controle-applications-informations-sur-le-processeur nouvelle palette avec : information sur le processeur, nombre de niveaux de cache, taille du cache de données
      • Programmation, waveform, waveforme numérique
      labview2009-waveform-waveform-numerique ajout de grouper les signaux numériques
      • Traitement du signal, opérations sur les signaux
      labview2009-traitement-du-signal-operations-sur-les-signaux ajout de nœud de délai de transformée en Z
      • Mathématiques, équations différentielles, équations différentielles partielles
      labview2009-mathematiques-equations-differentielles-partielles nouvelle palette avec : définir une EDP, définir un domaine d’EDP, définir la condition aux limites d’une EDP, définir la condition initiale d’une EDP, résolution d’EDP, rendu d’EDP
      • Communication de données, variable partagée
      labview2009-communication-de-donnees-variable-partagee
      • ajout de fonctions pour simplifier l’utilisation des variables partagées : établir une connexion à la variable, lire une variable, écrire une variable, fermer une connexion à une variable, nœud de propriété de variable.
      • pour les variable PSP : ouvrir et vérifier la connexion d’une variable, établir une connexion à une variable en arrière plan.
        pour les variables
      • E/S : lecture par balayage de la variable, écriture par balayage de la variable, lecture directe de la variable, écriture directe de la variable
      • Entrées/Sorties de mesures, moteur de balayage NI
      labview2009-es-de-mesures-moteur-de-balayage-ni nouvelle palette avec : synchronisation avec le moteur de balayage, obtenir la période du moteur de balayage, définir la période du moteur de balayage, obtenir le mode du moteur de balayage, définir le mode du moteur de balayage, rafraichir les modules locaux
      • Entrées/Sorties de mesures, moteur de balayage NI, contrainte
      labview2009-es-de-mesures-moteur-de-balayage-ni-contrainte nouvelle palette avec : activer les contraintes de variables, désactiver les contraintes de variables, effacer les contraintes de variables, contraindre une variable, annuler une contrainte de variable

      • Entrées/Sorties de mesures, moteur de balayage NI, défaillances
      labview2009-es-de-mesures-moteur-de-balayage-ni-defaillances nouvelle palette avec : obtenir une liste de défaillances, définir une défaillance, effacer une défaillance, effacer toutes les défaillances
      • Entrées/Sorties de mesures, moteur de balayage NI, configuration de défaillances
      labview2009-es-de-mesures-moteur-de-balayage-ni-configuration-de-defaillances nouvelle palette avec : définir une configuration de défaillance, effacer une configuration de défaillance, obtenir toutes les configurations de défaillances

      lundi 27 juillet 2009

      Utilisation de JAVA avec TestStand

      Résumé : TestStand intègre désormais un adaptateur JAVA, permettant l'appel direct de classes JAVA dans les séquences de test. Compatible avec TestStand 3.0+, LabWindows 6.0+ et Java 2 v1.4, cet adaptateur enrichit les possibilités de TestStand, déjà apte à gérer divers composants tels que LabVIEW, DLL et .NET. Il se divise en trois groupes : StartStop pour la JVM, Methods et Static methods pour les appels de méthodes. Les sources en C de LabWindows/CVI offrent une personnalisation avancée, facilitant les tests numériques, de chaînes, de validation et d'actions pour des applications comme les cartes mères PC.

      logoteststand On peut maintenant faire appel à des classes JAVA directement depuis les séquences TestStand.

      On sait que TestStand permet d’appeler des composants de type LabVIEW (VI), LabWindows/CVI (.C, .obj, .lib, .dll), DLL (donc tous langages capable de produire des DLL : C++, Pascal Object avec Delphi, Visual Basic et autres….), ActiveX (et donc tous langages compatibles), .NET assemblies (et langages compatibles…), HTbasic. On pourrait se dire que ces adaptateurs (adapters in english) sont principalement des technologies Microsoft. Choix commercial peut être, mais c’est sans compter sur la possibilité de les programmer soit même, surtout que l’ont peut prendre exemple des sources des adaptateurs, précédemment listés, qui nous sont fournis avec TestStand.

      Dans cette veine, un nouvel adaptateur nous est livré : l’adaptateur JAVA. Il comprend trois groupes :

      • StartStop : pour le démarrage et l’arrêt de la machine virtuelle JAVA (JVM).
      • Methods : appel à une méthode d’une classe
      • Static methods : appel à une méthode statique d’une classe

      L’appel aux méthodes permet les types de pas suivants : Numeric Limit Test, String Value Test, Pass/Fail Test et Action.

      Regardez ci-dessous un exemple d’une séquence (ici pour une carte mère d’un PC) écrit avec des pas JAVA (voir Java dans le dossier des exemples TestStand).

      TestStand-java
      Séquence de test en JAVA sous TestStand

      Il est à noter que les sources des adaptateurs JAVA sont codés en C sous LabWindows/CVI. L’interface de configuration des propriétés ci-dessous est donc modifiable.

      Java_EditJavaCall_db
      Propriétés d’un pas JAVA sous TestStand

      L’adaptateur JAVA est compatible avec TestStand 3.0 et supérieur, LabWindows 6.0 et supérieur et Java 2 version 1.4.

      mercredi 24 juin 2009

      Options de compilation sous LabWindows/CVI

      imageLes options de compilation sont souvent un peu oubliées alors que l’on développe un programme; hors, elles sont aussi importantes que le code lui même et cela pour plusieurs raisons : elles permettent de configurer la profondeur d’analyse de détection d’erreur du code source et de gestion mémoire lors de l’exécution, elle fixent les adressages pour la compatibilité avec d’autres composants, DLL par exemple. Ainsi, on l’aura compris, la modification d’une option peut changer le niveau de détection des erreurs par le debugger de LabWindows/CVI. On aurait alors un comportement instable de notre programme sans en avoir été averti lors de la compilation ou de l’exécution en mode “debug”. Aussi, pour vous aider dans vos débuts sous LabWindows/CVI, je vous propose d’adopter la configuration ci-après pour les “Build Options” du menu “Options” de LabWindows/CVI 9.0 (les options sont légèrement différentes pour les versions précédentes mais l’essentiel est resté).

      Build Options LabWindows/CVI 9.0

      lundi 22 juin 2009

      Structuration du code LabVIEW

      labview_thumb On peut définir un bon code source par plusieurs caractéristiques : déjà il faut qu’il fonctionne, qu’il soit facile à lire et facile à modifier donc aisément maintenable. Dans ces fins, on recherchera à structurer et non à jeter son code pèle-mêle sur le diagramme. On utilisera la palette de structures avec les Palette "structures" de LabVIEW boucles FOR ou WHILE, les CONDITIONS, la structure d’événements (pour gérer les actions sur des éléments de l’interface graphique comme un clic sur un bouton) ou encore les séquences, sans oublier les décorations comme les encadrés et les texte pour ajouter des commentaires. Mais aussi des sous-VI qui regrouperons des instructions, se qui allégera les diagrammes, capitalisera les fonctionnalités et ainsi rendra aisé la distribution des sources et qui permettra, en outre, une meilleur gestion des ressources mémoire par le moteur de LabVIEW lors de l’exécution.

      vendredi 20 février 2009

      Historique de LabWindows/CVI

      cviComme je le fais pour LabVIEW, j’écris l’historique des versions de LabWindows/CVI sur Wikipédia ici.

       

      • 1989 : LabWindows 1.0, sous DOS, première version publique
      • 1991 : LabWindows 2.0, sous DOS, aides au développement d'IHM
      • 1994 : LabWindows/CVI 3.0, sous Windows 3.1 et Solaris
      • 1995 : LabWindows/CVI 3.1, génération automatique de code
      • 1996 : LabWindows/CVI 4.0, compatibilité accrue avec les compilateurs externes
      • 1998 : LabWindows/CVI 5.0, compatibilité VXI et IVI
      • 2000 : LabWindows/CVI 5.5, librairies multitâches
      • 2001 : LabWindows/CVI 6.0, support ActiveX et amélioration de l'IHM
      • 2003 : LabWindows/CVI 7.0, intégration des workspaces
      • 2004 : LabWindows/CVI 7.1, complétion automatique
      • 2005 : LabWindows/CVI 8.0, nouveau système de déploiement, support des .NET assemblies
      • 2006 : LabWindows/CVI 8.1, variables réseau, contrôles graphiques du style Windows
      • 2007 : LabWindows/CVI 8.5, amélioration de la gestion du microprocesseur multi cœur, édition du code pendant le débogage, première version du toolkit temps réel
      • 2008 : LabWindows/CVI 9.0, gestionnaire de mémoire et compilation optimisée, support du C ANSI version 99 (notamment les tableaux dynamiques)

      Historique de LabVIEW

      labview Je suis en cours de rédaction sur Wikipédia de l’historique des versions de LabVIEW (pour voir l’article sur wikipédia):

       

      • 1986 : LabVIEW 1.0, première version sous Mac OS
      • 1990 : LabVIEW 2.0, optimisation des performances
      • 1992 : LabVIEW 2.5, sous Windows 3.1 et Sun OS (Solaris)
      • 1993 : LabVIEW 3.0
      • 1994 : LabVIEW 3.0.1, sous Windows NT
      • 1994 : LabVIEW 3.1
      • 1995 : LabVIEW 3.1.1, intégration de l'Application Builder
        1996 : LabVIEW 4.0
      • 1997 : LabVIEW 4.1
      • 1998 : LabVIEW 5.0, multitâche, conteneurs ActiveX, assistant pour les cartes d'acquisition (DAQ) et assistant pour le contrôle d'instrument
      • 1999 : LabVIEW 5.1, portage sous linux; première version de LabVIEW RT
      • 2000 : LabVIEW 6.0, contrôles au look 3D, référence d'un contrôle
      • 2001 : LabVIEW 6.1, optimisations et corrections
      • 2003 : LabVIEW 7.0, VI Express
      • 2004 : LabVIEW 7.1, traduit en français, allemand et japonais
      • 2005 : LabVIEW 8.0, Project Explorer, XControls, shared variables
      • 2005 : LabVIEW 8.1, optimisations et corrections
      • 2006 : LabVIEW 8.20, programmation orientée objets
        2007 : LabVIEW 8.5, première version du toolkit FPGA et du toolkit Statechart
      • 2008 : LabVIEW 8.6, nettoyage automatique des diagrammes

      Il me manque encore quelques infos sur certaines versions mais j’y travaille et toutes infos à ce sujet sont les bienvenues.

      mardi 10 février 2009

      La programmation orientée objet sous LabVIEW

      labviewSaviez-vous que depuis la version 8.20 de LabVIEW, sortie en 2006, il est possible de programmer avec une architecture objet ? On peut ainsi créer des classes avec leurs propriétés et leurs méthodes, comme en C++, Java, C#, pascal object (Delphi) et autres langages évolués.
      J'entends certains d'entre vous dire "mais qu'est-ce que ça nous apporte en plus pour le développement de logiciel de test et mesure ?". Serte, il est vrai que pour un petit logiciel qui fait une mesure ou plusieurs mesures et un traitement simple, le langage objets n'est pas forcément le plus adapté... quoi que : on pense toujours développer en "one shot" et on se rend très souvent compte, après coup, qu'il faut faire évoluer le logiciel et/ou récupérer une fonctionnalité pour l'intégrer dans un autre développement. C'est là que la programmation objet (LVOOP sous LabVIEW pour LabView Oriented-Object Programming) a tout son intérêt : elle permet un concept et une architecture plus proche du monde physique et donc du raisonnement humain (exemple d'objet : une voiture avec ses méthodes, tourner, freiner, et ses propriétés, vitesse maximum, couleur). De plus, on peut alors profiter des outils de modélisation qui permettent de concevoir sous forme de schémas semi-formels la structure d'un programme, basé par exemple sur UML (d'ailleurs il y a un toolkit dédié sous LabVIEW).

      mercredi 21 janvier 2009

      Wikipédia et le test et mesure


      Depuis 2006 je contribue à quelques articles sur ce merveilleux outil du savoir qu'est l'encyclopédie libre Wikipédia. Je m'étais pour le moment attelé à la rédaction d'articles sur l'histoire et la culture du nord du Mexique.
      Depuis quelque temps, je participe, quand j'ai le temps, à l'ajout d'articles concernant le test et la mesure et ses différents outils (mon profile sous Wikipédia : http://fr.wikipedia.org/wiki/Utilisateur:Adrienj). Si vous souhaitez participer à cet effort, qui n'a de noblesse que le partage des connaissances, alors rien de plus simple : créez un compte sous Wikipédia.
      Pas mal de chose reste à compléter, comme les articles sur : LabVIEW, LabWindows/CVI, TestStand, Measurement Studio, PXI, VXI... et beaucoup d'autres définitions ne font pas encore partie de l'encyclopédie : à vos claviers !

      dimanche 11 janvier 2009

      LabWindows/CVI 9.0 : les tables dynamique


      Avec l'implémentation du standard C99, une avancé est fait quant à la gestion de la mémoire : la déclaration de tables dynamiques (variable-length arrays in english).

      Vous me direz, les tables je connais, je la déclare un tableau de dix entiers en dimensionnant avec une constante comme suit : int iTable[10]. Les tables dynamiques, ok je connais, je déclare un pointeur puis je fais un malloc ou calloc pour la dimmensionner avec une variable, en n'oubliant pas de libérer la mémoire allouée avec un free à la fin du traitement.

      Alors que sont les variable-length arrays ?
      C'est la possibilité de declarer des tables en les dimensionnant avec des variables et non plus qu'avec les seules constantes.
      Voici deux exemples pour illustrer l'utilisation d'un tableau dynamique : On demande à l'utilisateur de dimmensionner une table que l'on alloue puis on affiche le contenu de cette table.

      AVANT
      int rows, cols;
      int i, j;
      int *piTable = NULL;

      printf("Entrez le nombre de ligne de la table: ");
      scanf("%d", &iNbLigne);
      printf("Entrez le nombre de colonne de la table: ");
      scanf("%d", &iNbColonne);

      *piTable = (int*)malloc(iNbLigne*iNbColonne*sizeof(int));
      if (piTable != NULL)
      {
        for (int i = 0; i < iNbLigne;i++)
        {
          for (int j = 0; j <
      iNbColonne;j++)
          {
            piTable[i][j] = i*iNbColonne + j;
            printf("%d ", piTable[i][j]);
          }
          printf("\n");
        }
      }
      free(piTable);
      piTable = NULL;


      MAINTENANT
      Dans le code suivant, on utilise également une autre nouveauté de la C99 : la déclaration des variables n'est plus cantonnée au début des blocs { }.

      int iNbLigne, iNbColonne;
      int i, j;

      printf("Entrez le nombre de ligne de la table: ");
      scanf("%d", &iNbLigne);
      printf("Entrez le nombre de colonne de la table: ");
      scanf("%d", &iNbColonne);

      int tiTable[iNbLigne][iNbColonne];
      for (int i = 0; i < iNbLigne; ++i)
      {
        for (int j = 0; j < iNbColonne; ++j)
        {
          tiTable[i][j] = i*iNbColonne + j;
          printf("%d ",
      tiTable[i][j]);
        }
        printf("\n");
      }

      Ici, la libération de la mémoire alouée à tiTable est effectuée à la fin de "vie" de cette variable. Comme tiTable est une variable locale, elle sera désalouée à la fin du traitement la fonction dans laquelle elle est déclarée.

      jeudi 8 janvier 2009

      Les nouveautés de LabWindows/CVI 9.0 : le standard C99


      Pas mal de nouveautés sont disponibles dans LabWindows/CVI 9.0 surtout avec l'implémentation du dernier standard du langage C : la C99. On aura donc attendu dix ans, le temps de maturation, pour bénéficier des avantages de ce nouveau standard.
      Qu'apporte la C99 ?
      Voici la liste de ces améliorations :
      • La déclaration des variables n'est plus cantonnée au début des blocs { }.
      • On peut déclarer des tables en les dimensionnant avec des variables et non plus qu'avec les seules constantes.
      • Chaque éléments des tables, structures et unions est maintenant initialisable distinctement et nommément.
      • Les éléments des tables, structures et unions peuvent être initialisés avec des variables.
      • nouveau type : les entiers de 64 bits (long long).
      • nouvelles fonctions snprintf et vsnprintf qui sont des versions "sécurisées" de sprintf et vsprintf puisqu'elles évitent les dépassements en contrôlant la taille de la chaîne d'entrée.
      • les macros à n arguments (...).
      • ajout de la variable du pré-compilateur __func__ contenant le nom de la fonction courante.
      Je remarque que cette dernière nouveauté (__func__) de la C99 était déjà présente depuis quelques versions de CVI.

      Je détaillerai dans des articles dédiés chaque aspect de la C99 pour LabWindows/CVI.