PROFDINFO.COM

Votre enseignant d'informatique en ligne

Introduction à QNX Momentics

L'environnement de développement intégré (IDE) QNX Momentics permet de développer des applications pour le système d'exploitation temps réel QNX Neutrino. Vous pouvez télécharger une version d'évaluation de QNX Momentics à partir de www.qnx.com/products/eval. Il est important de bien différencier la station de développement de la station de tests. La station de développement est l'ordinateur sur lequel on installe QNX Momentics et où l'on programme notre application. La station de développement peut être une station Windows 2000, Windows XP, Linux, Solaris ou (bien entendu!) QNX Neutrino. La station de tests est l'ordinateur sur lequel l'application sera exécutée. Le station de tests ne peut être qu'une station QNX Neutrino!

Création d'un premier projet

Démarrez QNX Momentics sur votre station de développement.

Créez un nouveau projet C++ en utilsant le menu File->New->QNX C++ Project.

Entrez le nom de votre projet. Le nom du projet ne doit pas contenir d'espaces! Exemple: MonPremierProjet. Le type de projet doit être Application.

Appuyez sur Next.

L'onglet Build Variants permet de choisir les processeurs pour lesquels l'application est développé. Enlevez tous les crochets sauf pour le processeur x86. Sous le processeur x86 vous trouverez les items release et debug. Cela signifie que votre exécutable sera troujours compilé deux fois. Une fois pour le processeur x86 sans informations de deverminage (release) et une seconde fois pour le processeur x86 avec informations de déverminage (debug). Assurez-vous que release et debug sont tous les deux sélectionnés.

Appuyez sur Finish.

QNX Momentics créera automatiquement un premier fichier source C++ qui se termine par .cc sur QNX et un fichier Makefile qui donne les règles de construction de l'exécutable.

Assurez-vous que le fichier source C++ contienne le code suivant:

 

#include <iostream>
#include <pthread.h>
#include <unistd.h>
using namespace std; 

int nbFraisesDebut = 100;
int nbFraisesFin = 0;
int NbFraisesConvoyeur = 0;
bool Finir = false;

pthread_mutex_t mutex; 

void *AjouterFraise(void * arg)
{
	while(!Finir)
	{
		if(nbFraisesDebut>0)
		{
			nbFraisesDebut--;
			pthread_mutex_lock(&mutex); 
			NbFraisesConvoyeur++;
			pthread_mutex_unlock(&mutex); 
		}
	}
	return 0;
}

void *EnleverFraise(void * Data)
{
	while(!Finir)
	{
		if(NbFraisesConvoyeur>0)
		{
			pthread_mutex_lock(&mutex); 
			NbFraisesConvoyeur--;
			pthread_mutex_unlock(&mutex); 
			
			nbFraisesFin++;
		}
	}
	return 0;
}

int main(int argc, char *argv[]) 
{
	int erreur; 
	pthread_t thread1, thread2;
	
	erreur = pthread_create(&thread1, NULL, AjouterFraise, NULL);
	if(erreur) 
	{
		cerr << "Erreur de creation de la thread" << endl;
		exit(-1);
	}
	erreur = pthread_create(&thread2, NULL, EnleverFraise, NULL);
	if(erreur) 
	{
		cerr << "Erreur de creation de la thread" << endl;
		exit(-1);
	}
	cout << "Attendre 2 secondes" << endl;
	sleep(2);
	Finir = true;
	cout << "nbFraisesDebut:" << nbFraisesDebut << endl;	
	cout << "NbFraisesConvoyeur:" << NbFraisesConvoyeur << endl;	
	cout << "nbFraisesFin:" << nbFraisesFin << endl;	
	
	return EXIT_SUCCESS;
}

Compilez votre projet en utilisant Project->Build Project. Corrigez vos erreurs s'il y a lieu.

Préparer la station de tests

Il faut dans un premier temps connaître l'adresse IP de votre station de tests. Pour ce faire, allez à votre station de tests et ouvrez un terminal puis tapez la commande ifconfig. Normalement le DHCP assigne automatiquement une adresse IP à la station. Si vous désirez assigner une addresse IP statique, utilisez la commande ifconfig en0 NouvelleAdresse. Vous pouvez aussi utiliser l'outil graphique de configuration réseau qui se trouve dans le menu Lauch->Configure->TCP/IP. Afin de tester la communication entre la station de développement et la station de tests, utilisez la commande ping qui disponible autant sur la station de tests comme sur la station de développement.

Ensuite, assurez-vous le processus qconn est bien démarré sur la station de tests.

Exécuter et déverminer votre projet

Revenez maintenant à votre station de développement.

Pour Momentics, une perspective est une disposition particulière des fenêtres utilisée dans un but précis. Par exemple la perspective C/C++ permet de développer facilement du code C/C++ tandis que la perspective Debug permet de déverminer facilement une application.

Nous allons maintenant créer un Target. Le target représente notre station de tests. Sélectionnez la perspective QNX System information en utilisant le menu Window->Open Perspective->Other->System information. Dans la fenêtre vide Target Navigator, cliquez sur le bouton de droite de la souris et sélectionnez Add New Target. Entrez un nom représentant votre station de tests (Exemple StationQNX) et son adresse IP. Laissez le port à 8000. Appuyez sur Finish. Vous aurez alors accès à plusieurs informations utiles sur le système dont la liste des processus.

Revenez maintenant à la perspective C/C++ en utilisant le menu Window->Open Perspective->C/C++ (default).

Pour exécuter et déverminer votre application il faut créer une configuration de démarrage (launch configuration). La configuration de démarrage conserve la façon dont un programme est démarré comme par exemple les paramètres de la ligne de commande, les variables d'environement, etc). Dans le menu Run, sélectionnez l'option Debug. La fenêtre de configuration de démarrage apparait alors. Puisque nous voulons exécuter le programme sur la station de tests qui est reliée à la sation de développement par le protocole IP, il faut cliquer sur le type de configuration C/C++ QNX QConn (IP), puis cliquer sur le bouton New. Il faut alors donner un nom à la configuration de démarrage. Sélectionnez ensuite l'application à démarrer. Pour ce faire, cliquez sur le bouton Search et sélectionnez votre exécutable. Sélectionnez l'exécutable qui se termine par _g et dont l'icône est un insecte. Ces deux indices vous indiquent que l'exécutable contient de l'information de déverminage. Dans la boite Target options, sélectionnez votre station QNX puis appuyez sur Apply. La configuration de démarrage est maintenant terminée.

Pour déverminer le programme, cliquez sur le bouton Debug. Momentics passera alors à la perspective Debug. Automatiquement, le programme s'arrêtera à la première ligne. Remarquez que vous exécutez présentement votre application ligne par ligne à distance sur la machine de tests. N'est-ce pas formidable?? Vous pouvez maintenant contrôler le debuggeur à l'aide des boutons Resume, Terminate, Step into et Step over. La fenêtre Variables vous présente les variables existantes à ce point d'exécution du programme et leur valeurs. Afin d'ajouter ou d'enlever un point d'arrêt, il faut faire apparaître le menu contextuel en cliquant dans la marge de gauche du code et choisir Toggle Breakpoint. Lorsque le programme a terminé son exécution, cliquez sur le bouton Remove All Terminated Launches pour effacer l'exécutable de la station de tests.

Pour exécuter votre programme sans debuggeur (ce qui sera beaucoup plus performant!), il faut cliquer sur Project->Run puis, créer un nouvelle configuration de démarrage qui démarrera l'exécutable sans informations de déverminage.