background image

Ć

wiczenie 3 

Pakiet QNX Momentics IDE 4.7  

Instalacja i funkcjonowanie systemu 

Instalujemy  środowisko  tworzenia  aplikacji  dla  systemów  czasu  rzeczywistego  Momentics 

IDE. Pakiet będzie pracował w systemie Windows  – system QNX realizujący nasze zadania dzia-
łający na maszynie wirtualnej stanowi target – cel i tam będziemy uruchamiali nasze aplikacje. 

Czynności po instalacji: 

1.

 

Startujemy QNX w maszynie wirtualnej. 

2.

 

Badamy w Photonie stan konfiguracji sieci: Configure – Network 

zakładka Device: 

DHCP , pole "enable device" zaznaczone 

zakładka Network: 

Host: localhost 
Domain: localdomain  
Gateway (brama): jaki

ś

 

IP

 

Name Server: ten sam IP 

3.

 

W terminalu badamy IP: 

#ifconfig 

powinniśmy otrzymać odpowiedź: 

status: active 

inet 

IP2

 

4.

 

W terminalu badamy ping do bramy : 

#ping IP 
#ping IP2 

po uwa

ż

nym wpisaniu obu IP konfiguracyjnych obserwujemy poł

ą

czenie – zwracane pakiety 

kontrolne w krótkich czasach 

5.

 

W terminalu QNX uruchamiamy proces połączenia: 

 

#qconn 

6.

 

Windows z wiersza poleceń cmd dowiadujemy się jaki jest adres IP dla WMWare8 i 
sprawdzamy do tego adresu ping w terminalu (można również sprawdzić ping z wiersza 
cmd do IP2). 

7.

 

Uruchamiamy pakiet Momentics, zwracając uwagę na lokalizację Workbench

8.

 

Po zamknięciu ekranu powitalnego poznajemy środowisko programistyczne. 

Pakiet Momentics 

1.

 

Perspektywa C/C++ (ikony w prawym górnym rogu). 

2.

 

Tworzymy nowy projekt QNX C korzystając z menu File

background image

 

3.

 

W pierwszym kroku nadajemy nazwę projektowi. 

4.

 

W drugim kroku zaznaczamy x86 (Little Endian) w zakładce Built variants 

5.

 

Wykonujemy Built projektu w Project Explorer z menu kontekstowego projektu lub z 
menu głównego. 

6.

 

W menu  Run - Run configuration…  ustawiamy: 

a.

 

tworzymy nową konfigurację w kontekście C/C++ QNX (ikonka ), 

 

b.

 

wybieramy nasz projekt i aplikację, 

c.

 

dodajemy nowy target i wpisujemy adres 

IP2

 – karty wirtualnej systemu QNX. 

Można również tworzyć target z zakładki Target Nawigator na dole ekranu. 

7.

 

Jeśli mamy w edytorze przykładowy kod źródłowy: 

#include

 

<stdlib.h>

 

#include

 

<stdio.h>

 

 

int

 main(

int

 argc, 

char

 *argv[]) { 

 

printf

(

"

Welcome to the QNX Momentics IDE\n

"

); 

 

return

 EXIT_SUCCESS; 

możemy uruchomić projekt – z menu Run. Po prawidłowym ustaleniu wszystkich 
parametrów w konsoli otrzymamy komunikat powitalny Welcome  

8.

 

Po każdej zmianie w kodzie wykonywać kompilację programu (Built). Błędy obserwu-
jemy w konsoli lub w zakładce Problems. 

background image

9.

 

Zmieniamy perspektywę na QNX system information – możemy tu: 

a.

 

obejrzeć procesy w systemie QNX na Target Nawigatorze i w zakładce System 
Sumary, 

b.

 

wybrany proces - Process Information (i jego ewentualne wątki), 

c.

 

obejrzeć informacje o pamięci systemu, 

d.

 

wydruki na konsoli, 

e.

 

przejrzeć system plików w menu Window – Show view – Target file system. 

PID 

Każdy proces ma swój PID – identyfikator. Możemy go wyświetlić korzystając z funkcji: 

int getpid() 

Procesy tworzą hierarchię zależności, każdy proces ma swojego rodzica (za wyjątkiem procesu 

systemowego procnto o identyfikatorze 1). Identyfikator rodzica można uzyskać za pomocą funkcji: 

int getppid() 

Tworzenie nowego procesu będącego kopią procesu macierzystego 

Proces potomny tworzy funkcja:

 

int fork() 

Proces potomny w momencie utworzenia posiada własny segment kodu, danych i stosu - tworzo-

na jest kopia z procesu macierzystego. Wartości zmiennych w procesie potomnym są takie same jak 
w procesie macierzystym przed wykonaniem funkcji fork,  lecz potem oba procesy "nie widzą" zmian 
dokonywanych przez ich kod. 

Funkcja zwraca 0 w kodzie procesu potomnego a PID nowego procesu w procesie macierzystym 

(lub -1 gdy nowy proces nie może być utworzony).  

Zadania 

1.

 

Zapoznać się ze środowiskiem Momentics. Wykonać proces przykładowy. 

2.

 

Napisać proces, który w pętli wyświetli liczby od 1 do 10. Aby sterować tempem, zastosować w ciele 
pętli funkcję: 

unsigned int sleep( unsigned int sekundy ); 

Dłużej trwający proces obserwować w perspektywie QNX System Information. Można zatrzymać pro-
ces przyciskiem w konsoli lub zabić poleceniem kill
 w terminalu QNX: 

# ps 
… 
# kill id_procesu 

3.

 

Wyprowadzić w konsoli PID procesu i PID jego "rodzica". 

4.

 

Napisać  program,  w  którym  tworzony  jest  proces  potomny.  W  kodzie  można  rozróżniać  operacje 
procesu  macierzystego  i  potomnego  stosując  instrukcję  if  badającą  wartość  zwróconą  przez  funkcję 
fork
. Wyświetlać PID procesu i PID jego przodka dla obu procesów – macierzystego i potomnego. 

5.

 

Sprawdzić  zachowanie  wartości  zmiennej  x  w  procesie  potomnym,  zainicjowanej  np.  z  wartością 
równą  10  w  procesie  macierzystym  przed  utworzeniem  procesu  potomnego.  Zróżnicować  zmianę 
wartości  zmiennej  w  obu  procesach  (np.  w  procesie  macierzystym  inkrementować,  a  w  potomnym 
dekrementować) i sprawdzić niezależność operacji na zmiennej w obu procesach. 

6.

 

Napisać program, w którym w pętli o trzech powtórzeniach tworzony jest proces potomny. Skontro-
lować  wyświetlając    odpowiednie  informacje,  ile  naprawdę  zostanie  utworzonych  procesów  potom-
nych (wyprowadzać w pętli dane procesów).