LabWindows/CVI

cancel
Showing results for 
Search instead for 
Did you mean: 

Probleme de Compilation cvirt

Solved!
Go to solution

Bonjour,

Je souhaite compiler  un programme pour obtenir une DLL  RT utilisable sur un boitier PXI.

 

Voici ma configuration : Labwindows cvi rt 6.1

 

voila le fichier que je n'arrive pas à compiler:

 

#include <cvirte.h> 
#include <windows.h>
#include <ansi_c.h>
#include <userint.h>
#include <utility.h>
#include "uut_sensordre_rt.h"

#include "global.h"
#include " init_test.h"
#include "tache_execution_test.h" 
#include "tache_execution_test_util.h"
#include "tache_surveillance.h"
#include <tcpsupp.h>
#include <cvidef.h>     


extern int CVIFUNC RTIsShuttingDown (void);
static int nb_thread = 20;
void CVIFUNC_C RTmain (void)
{

int err = 0;
static int       
Fonction_tache_communication_ID    =  0;     
static int        Fonction_tache_surveillance_ID = 0;
static int         Fonction_tache_execution_test_ID = 0;   

HANDLE             mainThreadhdl;
    if (InitCVIRTE (0, 0, 0) == 0)
        return;    /* out of memory */

    /* your initialization code */
    gprint( printf("Initialisation\n"));
    iteration = 75;

    Test_Fin = NOK;

    vg_TR_exit = 0;  
    vg_TR_surveillance_init =     TACHE_NO_INITIALISATION;     
    vg_TR_communication_init =     TACHE_NO_INITIALISATION;   
    vg_TR_executionTest_init =     TACHE_NO_INITIALISATION;   
    vg_TR_Mode =  MODE_INITIALISATION;  

    //creation d'un verrou
    CmtNewLock (NULL, 0, &gMutex_etat_test);
    //creation d'un verrou

    CmtNewLock (NULL, 0, &gMutex_etat_mode);
    //creation d'un verrou
    CmtNewLock (NULL, 0, &gMutex_data_resultats);

    // creation d'une memoire de passage  utilise pour les msg de commande
    CmtNewTSQ (10,sizeof(t_TR_msg_cmd_data) , OPT_TSQ_DYNAMIC_SIZE, &vg_TR_hdl_msg_cmd_set_queue);

    // creation d'une memoire de passage  utilise pour les msg de commande test
    CmtNewTSQ (10,sizeof(t_TR_msg_cmd_data) , OPT_TSQ_DYNAMIC_SIZE, &vg_TR_hdl_cmd_test_set_queue);

    // initialisation des cartes
    Init_test( );
   
    // passage priorité basse de main
    mainThreadhdl = GetCurrentThread();
    SetThreadPriority(mainThreadhdl,THREAD_PRIORITY_LOWEST);
    //======================================
     //  ORGANISATION DES TACHES
     //======================================

     // creation d'un pool  de 4 taches
      CmtNewThreadPool (4, &g_h_pool);    

     // creation tache de communication Niveau low      
     err = CmtScheduleThreadPoolFunctionAdv (g_h_pool,
                                 
Fonction_tache_communication, NULL,
THREAD_PRIORITY_BELOW_NORMAL, NULL,
EVENT_TP_THREAD_FUNCTION_END, NULL,                                
RUN_IN_SCHEDULED_THREAD ,
&Fonction_tache_communication_ID);

 // creation tache  de surveillance  Niveau Normal     
    err = CmtScheduleThreadPoolFunctionAdv (g_h_pool,                        
Fonction_tache_surveillance, NULL,
THREAD_PRIORITY_NORMAL, NULL,
EVENT_TP_THREAD_FUNCTION_END, NULL,
RUN_IN_SCHEDULED_THREAD ,
&Fonction_tache_surveillance_ID);
    
    // creation tache d'execution de tests Niveau HIGHEST            
             CmtScheduleThreadPoolFunctionAdv (g_h_pool,                     
Fonction_tache_execution_test,NULL,
THREAD_PRIORITY_HIGHEST, NULL,
EVENT_TP_THREAD_FUNCTION_END, NULL,
RUN_IN_SCHEDULED_THREAD ,
&Fonction_tache_execution_test_ID);

  while (!RTIsShuttingDown ())
    {
      //Sleep(1000);
    }
    vg_TR_exit = 1;
    while( nb_thread != 0)
    {
        (CmtGetThreadPoolAttribute (g_h_pool,  ATTR_TP_NUM_ACTIVE_THREADS ,&nb_thread ));
    }

    /* your cleanup code */
    gprint( printf("cleanup")); 
        err = CmtDiscardThreadPool (g_h_pool);
        g_h_pool = 0;

        // destruction du verrou
        CmtDiscardLock (gMutex_etat_test);
        CmtDiscardLock (gMutex_etat_mode);
        CmtDiscardLock (gMutex_data_resultats);

        // destruction de la memoire de passage  utilise pour les resultats 
        CmtDiscardTSQ (vg_TR_hdl_msg_cmd_set_queue);
     
       // destruction de la memoire de passage  utilise pour les resultats 
        CmtDiscardTSQ (vg_TR_hdl_cmd_test_set_queue);
        //arret cartes
        Fin_Init_test( );
       CloseCVIRTE ();
 


 

Et voila le resultat de la compilation:

 

 90,7   Missing prototype         (pour CmtNewThreadPool)

97,11   Missing prototype 

100,35 Undeclared identifier "EVENT_TP_THREAD_FUNCTION_END"

101,35 Undeclared identifier "RUN_IN_SCHEDULED_THREAD"

106,11  Missing prototype

122,5 Missing prototype 

140,10 Missing prototype 

140,48  Undeclared identifier "ATTR_TP_NUM_ACTIVE_THREADS"

152,15 Missing prototype

 

 

Le probleme vient surement du fichier Utility.

Avez vous une idée?

 Faut il que je recharge CVI 6.1 ?

 Merci 

0 Kudos
Message 1 of 5
(3,773 Views)

Hello,

 

Can you send a MAX report please ? Under MAX select File-> create a report

Did you try an NI example ?

 

Regards

Alexandre M. | Certified LabVIEW Developer
Embedded and Control Systems Engineer (NI France)
0 Kudos
Message 2 of 5
(3,743 Views)

Bonjour,

    Voila les fichiers en pieces jointes

 

Merci

0 Kudos
Message 3 of 5
(3,734 Views)

Le module RT pour CVI n'est compatible qu'avec la version 8.0.1 ce CVI.
Par ailleurs, je ne vois nul part de module RT d'installé dans le rapport de MAX que vous avez fourni. Seul le Runtime RT pour CVI  est installé et ne permets pas la compilation de code.
 
Pour pouvoir compiler votre code, il vous faut au minimum CVI 8.0.12 et le LabWindows/CVI 8.0 Real-Time Module
 
Cordialement,


PS : pour les demandes en français merci de poster dans la section Française

Message Edité par alex07 le 11-20-2008 07:16 AM
Alexandre M. | Certified LabVIEW Developer
Embedded and Control Systems Engineer (NI France)
0 Kudos
Message 4 of 5
(3,730 Views)
Solution
Accepted by lucky92

Merci

 

    En effet il a fallu recharger RT

 

Cordialement

 

0 Kudos
Message 5 of 5
(3,692 Views)