LU-BST:TOSSIM

From DiLab
Jump to: navigation, search

Pamācība, kā piedarbināt TOSSIM uz Ubuntu 10.4.

Autors: Kārlis Visendorfs.

2010-okt-7

Ja programmas kompilējas priekš motēm, bet simulatoram ne:

1. Jānoskaidro kāda Python versija ir datora. Ieraksta konsolē:

 python -V

(ar lielo V)

2. Jāuzliek python dev paka caur synaptic package manager, vēlams, kas atbilst Python versijai. Var ar likt all dev. Piemērs - python2.6-dev vai arī python-dev-all. Synaptic manager pieejams caur - sistēma->administrēšana->Synaptic pakešu pārvaldnieks. (Pieļauju, ka labāk likt all-dev, jo kaut kur forumos bija minēts, ka vajadzīgi arī kaut kādi library. Man sanāca uzliekot dev-ll un dev pakas)

3. Jāpievieno c++ kompilators un cits stuffs - no komandrindas:

 sudo apt‐get install build‐essential

Piezīme (Ģirts Strazdiņš): iepriekšējos divus soļus var aizstāt ar komandu konsolē

 sudo apt-get install python-dev-all build-essentials


4. Jāpasaka TOSSIM`am kādu Python mums ir. To var pateikt failā sim.extra ,kas atrodas

 /opt/tinyos-2.1.1/support/make

(ceru, ka neesmu sajaucis slīpsvītras uz kuru pusi). Problēma - vajag root tiesības, lai failu drīkstētu labot => komandrinda.

 cd /opt/tinyos-2.1.1/support/make
 sudo gedit sim.extra

Ar gedit tiek atvērt teksta fails, kurā jaizmaina (vai arī nav) rinda PYTHON_VERSION=2.4 -atrodas faila sākumā, nevajadzētu būt grūti atrast. Šeit ir jānomaina uz to versiju ko sākumā apskatījām ar komandu python -V . Piezīme - te ir jānorāda versija formā PYTHON_VERSION=x.x Man bija problēma, jo man bija versija 2.6.5, ko arī godīgi ierakstīju, bet tāpat nekompilējās - vajadzēja norādīt 2.6 un viss aizgāja.

Šim visam noderīgākā saite internetā : http://ubuntuforums.org/showthread.php?t=866248 -Otrajā postā viss tur izklāstīts.

Tagad vairāk par pašu TOSSIM: http://www.slideshare.net/gnawali/tinyos-21-tutorial-at-ipsn-2009 -Laba prezentācija, ar kuras palīdzību var nojaust TOSSIM jēgu. Par TOSSIM sākot no 47. slaida. Ideja par TOSSIM - tas nav parast debbugers, kāds varētu būt piemēram Java`i. Debug paziņojumi vienkārši neiznāk ārā to palaižot - ir jāraksta programma priekš tā. C++ daļu es vēl neesmu apskatījis, grūti komentēt. Tāpēc lietosim "vieglāko" variantu. Python interpretatoru. Bonus ziņa - ir jāapgūst Python pamati!

Programmas Blink debugošana. (Visu var atrast arī TinyOS Wiki lapā: http://docs.tinyos.net/index.php/TOSSIM#Running_TOSSIM_with_Python )

1. Aizejam uz Blink mapi, izmantojot komandrindu (ceru visi to māk).

2. Kompilējam programmu priekš simulatora ar komandu - make micaz sim (Pagaidām TOSSIM atbalsta tikai micaz motes. Telosb neatbalsta.)

3. Parādās teksta blāķis un beigās iepriecinoša ziņa -

*** Successfully built micaz TOSSIM library. 

4. Palaižam Python interpretatoru ar komandu: python Rezultātā iegūstam:

Python 2.6.5 (r265:79063, Apr 16  2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Te tad arī rakstīsim to, ko gribēsim nodebugot.

5. Importējam TOSSIM:

from TOSSIM import *

6. Importēsim sistēmas print out un laikam arī citas fīčas:

import sys

7. Jāizveido mainīgais un tam jāpiešķir TOSSIM:

t = Tossim([])

8. Izveidosim moti un piekurbulēsim to

m = t.getNode(32)
m.bootAtTime(242119)

9. Neliels stāsts par debug paziņojumiem - apskatot Blink programmu, var redzēt ka debug rindas ir šādā formā -

dbg("BlinkC", "Timer 0 fired @ %s.\n", sim_time_string());

BlinkC norāda kanālu, pa kuru attiecīgais debug paziņojums nāks ārā Tad seko paziņojuma teksts un paziņojuma datu tips (laikam)

Tātad, lai tiktu pie kaut kādas debug informācijas ir jāpieslēdzas attiecīgajam debug kanālam. Tas ir tāpēc, lai programmai (un visticamāk arī vairākām virtuālajām motēm) varētu būt vairāki debug paziņojumi, par dažādām tēmām - lai nebūtu viss viens milzīgs blāķis ar debug informāciju, ja ir vairākas motes.

9.1. Pievienojam TOSSIM mainīgajam t kanālu ar mums interesējošo debug paziņojumu:

t.addChannel("BlinkC", sys.stdout);  (te ar tiek pielietots pirms tam import sys ko veicām)

9.2. Viss ir jauki un varam sākt darbināt moti un skatīties, kā tekstuāli slēdzas lampiņas - to dara pasaucot TOSSIM mainīgajam nākamo eventu (notikumu).

t.runNextEvent()

Te vajadzētu būt paziņojumam 1 vai true, noteikti. Vai būs debug paziņojums ir grūti spriest - varbūt vēl nav noticis tas events, kas iededz lampiņu. Līdz ar to sāk prasīties darbināt kādu ilgāku laiku posmu, ne tikai pa vienam eventam. Vajadzīgs cikls - vienkāršākā variantā:

for i in range (0,10):
    t.runNextEvent()

Obligāti ir jālieto atkāpe - tas Python nozīmē to pašu ko C++ - {}, pie tam, bez atkāpes nevar iztikt, citādāk skaļi bļauj un nevar saprast kādēļ (te ar parādas pirmā vajadzība zināt Python). Un beigās vēl viens enter vajadzīgs, lai viss tur aizietu, bet to jau sapratīsiet, gan paši.

10. Pats svarīgākais - no Python interpretatora var iziet ar komandu:

exit()

/*------------------------------------------------------------------------*\

Mošu tīklu un sarežģītākas lietas skatīt TinyOS Wiki lapā: http://docs.tinyos.net/index.php/TOSSIM

Piezīme: man pašam kompilēt sanāca tikai Blink programmu. Citas īsti ne.

/*------------------------------------------------------------------------*\

Te ievietošu iepriekš aprakstītās komandrindiņas, lai vismaz import nav jāraksta katru reizi ar roku: (Komandrindā var ievietot ar peles labo pogu (vai copy = ctr+ins, paste = shift+ins), ctr+c/+v nestrādā)

from TOSSIM import *
import sys
t = Tossim([])
m = t.getNode(32)
m.bootAtTime(242119)
t.addChannel("BlinkC", sys.stdout);
for i in range (0,10):
    t.runNextEvent()