zarhiva - malikolibri/contiki-iris-examples GitHub Wiki

Proces se deklarise koristeci makro: PROCESS(name, strname). Gde je:

  • name - ime procesa
  • strname - string koji opisuje proces

Kada budemo zeleli da se pozovemo na odredjeni proces koristicemo njegov name.

Definicija procesa pocinje sa: PROCESS_THREAD(name, ev, data). Gde su:

  • name - ime procesa (pogledati deklarisanje)
  • ev - event zbog koga je proces pokrenut
  • data - podaci koji se prisledjuju (npr pristigli IP paket)

U telu procesa mogu da se deklarisu varijable i/ili funkcije inicializacije nakon cega sledi makro PROCESS_BEGIN() koji funkcionise u paru sa makroom PROCESS_END() Glavni deo procesa se nalazi izmedju ta dva makroa. Kod koji se nalazi izmedju ta dva makroa se ponasa kao proces - nastavlja od mesta gde je eventualno blokiran.

###Makroi za blokiranje procesa

  • PROCESS_WAIT_EVENT() zaustavlja proces do sledeceg eventa
  • PROCESS_WAIT_EVENT_UNTIL(cond) zaustavlja proces i ceka na sledeci event uz uslov cond == True
  • PROCESS_WAIT_UNTIL(cond) zaustavlja se proces i ceka da se ispuni cond == True
  • PROCESS_WAIT_WHILE(cond) proces je blokiran sve dok je cond == True
  • PROCESS_PAUSE() salje sam sebi event i blokira se. Ovim se proces stavlja na kraj reda za izvrsavanje.
  • PROCESS_EXIT() Prekidanje procesa.

1.1 Instant Contiki

Da bi sto jednostavnije isprobali i krenuli s radom na ne linux sistemima razvojni tim Contiki Os-a je ponudio donekle pripremljeno radno okruzenje u vidu vmware virtualne masine.

Neophodni koraci:

  • Preuzeti i instalirati besplatni vmware player
  • Preuzeti sliku (image) sa ContikiOs sajta i raspakovati fajl.
  • Pokrenuti vmware-player i otvoriti raspakovanu sliku
  • Pre pokretanja same virtualne masine neophodno je u podesavanjima (Virtual Machine > Virtual Machine Settings > Usb Settings) ukljuciti "Show All USB devices"
  • Pokrenuti virtualnu masinu i ulogovati se (password: user).
  • Proveriti da li je programator prepoznat i ukljuciti ga. (Virtual Machine > Removable Devices > Future Devices Crossbow MIB520CA > Connect)

Napomena za linux korisnike: Ukoliko programator nije prepoznat potrebno je pre pokretanja vmware player-a iz terminala pokrenuti: sudo vmware-usbarbitrator

###1.2 Podesavanje radnog okruzenja na postojecem linux-u

Ako vec postoji instaliran linux sistem nije neophodno koriscenje virtualne masine. Potrebno je preuzeti Contiki izvorni kod sa:

Nakon preuzimanja potrebno je raspakovati arhivu u Home direktorijum.

###2 Instalacija AVR - toolchain-a Na Iris nodovima se nalazi AVR ATmega 1281 mikrokontroler. Da bi Contiki koristili na Irisu neophodno je instalirati AVR-toolchain koji predstavlja zbirka alata za kompaliranje i programiranje AVR familije mikrokontrolera.

AVR toolchain:

  • avr-binutils - alati za manipulaciju nad binarnim i object fajlovima,
  • avr-gcc - kompajler,
  • avr-gdb - debugger,
  • avr-libc - biblioteke,
  • avrdude - program za upisivanje programa u mikrokontroler.

Komanda za instalaciju na Ubuntu baziranim distribucijama: sudo apt-get install avrdude binutils-avr gcc-avr avr-libc gdb-avr

###3 Podesavanje dozvola za pristup USB portu

Na Linuxu iz sigunosnih razloga obicnim korisnicima obicno nije dozvoljen direktan pristup USB portu.

Da bi proverili ko ima pravo pristupa iz terminala treba pokrenuti: ls -l /dev/ttyUSB0 Dobice se rezultat slican:
crw-rw---- 1 root dialout 188, 0 Aug 28 21:17 /dev/ttyUSB0
Iz rezultata se vidi da pravo koriscenja ima vlasnik root i grupa korisnika dialout

Pokretanjem groups u terminalu cemo dobiti listu grupa u koje je trenutno ulogovani korisnik uclanjen. Primer rezultata:
user adm cdrom sudo dip plugdev lpadmin sambashare
Iz primera se vidi da trenutni korisnik nije clan dialout grupe i da nece imati pravo pristupa USB portu.

Da bi dodali korisnika u grupu dialout treba izvrsiti sledecu komandu: sudo usermod -a -G dialout <username>, gde username odgovara imenu trenutno ulogovanog korisnika. (Ako se koristi virtualna masina korisnik se zove "user")
Da bi se izvrsena konfiguracija primenila neophodan je loigout/login ili restart. ###4 Izmene na izvornom kodu U trenutnoj verziji 2.6.1 Contiki Os-a postoji par gresaka koje je neophodno ispraviti da bi se Contiki uspesno kompajlirao:

  • U fajlu ~/contiki/platform/iris/node-id.c potrebno je zameniti sa ispravljenom verzijom fajla: node_id.c (Dodat #include "contiki-conf.h" i ispravljeni tipovi u skaldu s node-id.h)
  • Izmena Makefile fajla tako da direktive i podrazumevani portovi rade kako je zamisljeno. Fajl ~/contiki/platform/iris/Makefile.iris treba zameniti sa prepravljenom kopijom fajla: Makefile.iris

###5 Kompajliranje i pokretanje primera. Kao test gore primenjenih podesavanja posluzice jedan od primera koji se distribuira kao deo Contiki izvornog koda. Potreban su bar dva noda.

  1. Selimo se do direktorijuma u kome se nalazi primer: cd ~/contiki/examples/ipv6/simple-udp-rpl/
  2. Ako uz pomoc komande ls pogledamo sadrzaj direktorijuma videcemo da postoji vise c fajlova koji u ovom slucaju predstavljaju razlicite primere. Za ovaj test cemo koristiti broadcast-example
  3. Da bi iskompajlirali odredjeni fajl treba izvrsiti: make TARGET="iris" broadcast-example
  4. Ako je kompajliranje uspesno proslo izvrsni fajl uploadujemo na node sa: make TARGET="iris" broacast-example.u
  5. Nakon programiranja i drugog noda poruke koje node salje na serisjski port mozemo pratiti tako sto ce jedan od njih biti prikljucen preko plocice za programiranje na USB (serijski) port. U terminal treba ukucati: make TARGET="iris" login Da bi videli uvodnu poruku noda treba ga restartovati. Na ekranu ce se ispisati poruka slicna ovoj:
MAC 00:1a:4c:00:13:e1:7a:2b
CSMA nullrdc, channel check rate 128 Hz, radio channel 26
Tentative link-local IPv6 address fe80:0000:0000:0000:021a:4c00:13e1:7a2b
Contiki-2.6-737-gfe0a042 started. Node id 0
Data received on port 1234 from port 1234 with length 4
Data received on port 1234 from port 1234 with length 4
Sending broadcast

Napomena: Kada se Iris node prikljuci na USB port on pravi \dev\ttyUSB0 za potrebe programiranja kontrolera i \dev\ttyUSB1 za potrebe serijse komunikacije. Tako na primer mozemo "slusati" port sa cat \dev\ttyUSB1. Medjutim, desava se da ponekad da se uradjaj ne prijavljuje na podrazumevanim portovima (na primer kada se u toku rada fizicki otkaci node od plocice za programiranje pa pri novoj konekciji pravi nove portove) Tada je u make komandama potrebno definisati novi port. Na primer: make TARGET="iris" PORT="/dev/ttyUSB3" broacast-example.u

⚠️ **GitHub.com Fallback** ⚠️