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.

Ouverture du blog

Je parlerai ici des techniques de développement pour le Test et la Mesure :
  • programmation : principalement autour des solutions de National Instruments comme LabVIEW, LabWindows/CVI, TestStand, Measurement Strudio .NET...
  • instrumentation : les composants d'un banc de test, mesure ou validation, les différents bus industriels et les nouveautés