Skriv ut
Medan andra nyblivna fäder börjar renovera huset eller skaffar sig ett bättre betalt jobb passade Adam Dunkels på att ta fram grunderna till den minimala IP-stacken uIP.

– Han sov, hans mamma sov, så jag satt där och programmerade på min laptop. Någonting måste man göra, säger han med glimten i ögat.

Egentligen fångades Adam Dunkels intresse för det minimala redan med examensarbetet på Luleå Tekniska högskola vid millennieskiftet. Projektet gick ut på att utrusta spelarna i Luleå hockey med olika sensorer och en kamera. Data överfördes trådlöst med Bluetooth och tanken var att ge publiken något extra. De åskådare som hade handdatorn iPaq eller en bärbar dator kunde se hur spelarna mådde och få bilder från kamerorna som var fästa i hjälmarna.

– Vi körde ett test och systemet fungerade men det användes nog bara en gång. Det blev för fysiskt ansträngande för spelarna och Luleå förlorade matchen har jag för mig, säger han och skrattar.

Adam Dunkels

Befattning: Senior scientist på Sics.

Född: 1978 i Luleå.

Bor: Stockholm.

Familj: Gift, tre barn.

Adam Dunkels roll i projektet var att ta fram en IP-stack. Efter ex-jobbet fortsatte han att utveckla stacken och så småningom släppte han den som öppen källkod under beteckningen lwIP.

– Många var intresserade av att använda lwIP men ville ha ner den i storlek. Det fanns en allmän uppfattning att en IP-stack var så stor att man inte kunde få in den i en åttabitarsprocessor.

Fortsatte att reducera IP-stacken
Intresset fungerade som en ögonöppnare för Adam Dunkels som år 2000 hade börjat på forskningsinstitutet Sics i Kista. Han vidareutvecklade lwIP och resultatet blev uIP som är jämngammalt med hans första barn. uIP utför bara det absolut nödvändigaste för att IP-stacken ska uppfylla standarden. Den behöver inte mer än 4 till 5 kbyte för koden och cirka 1,5 kbyte för arbetsminnet.

– Man kan klämma ner den ändå mer om man tar bort vissa funktioner.

IP-stacken utvecklades för små apparater som skulle kopplas upp till det fasta nätet. Det fann sin väg in i en del kommersiella produkter även om många belackare på den tiden hävdade att IP var för svårt och stort för dessa apparater.

– Det roliga är att det är samma argumentation idag kring trådlösa apparater, att IP är för stort. Jag hävdar fortfarande att det går.

För att få ner storleken på IP-stacken kan man bland annat komprimera huvudet på ett smart sätt. Adam Dunkels publicerade de första artiklarna på temat år 2004 vilket plockades upp av folk i branschen.

– 2005 startade Internet Engineering Taskforce en standardiseringsgrupp kallad 6lowpan och 2006 kom den första standarden.

IP även i de minsta systemen

Idag finns det produkter som använder 6lowpan (IPv6 over Low power WPAN), bland annat system för hemautomation och industriell övervakning.

Adam Dunkels
– Även Zigbee går mot att inkorporera IP. Idag finns det tre stora trådlösa standarder för automationstillämpningar. Det är Zigbee, Wireless Hart och ISA 100A.

De två sistnämnda bygger på 6lowpan och inom Zigbee pågår diskussioner om att inkorporera IPv6 via 6lowpan i standarden.

– Jag tror det kommer att bli så även om man som användare inte kommer att se det. Visst, det blir lite större men ofta gör det saker som man ändå behöver.

I 6lowpan har man skalat bort funktioner som till exempel VPN, Virtual Private Network. Men det går att pressa storleken på huvudet än mer.

– I normalfallet behöver man bara tala om att det är ett nomalkomprimerat huvud. Är det något annat så skickar men det fulla huvudet.

Hans arbete på Sics har dock glidit över mot operativsystem och programmeringsabstraktioner, även det två varianter av det minimala.

Programmeringsabstraktionen går under beteckningen Protothreads och är en metod för att minska minnesåtgången. I normala operativsystem reserverar man en minnesarea för varje tråd vare sig den behöver det eller inte.

– 30 procent av arbetsminnet kan vara upplåst men ändå outnyttjat.

Adam Dunkels lösning kan lite slarvigt beskrivas som att man lägger alla trådar på en och samma stack som då får ett linjärt flöde.

– Idén är otroligt enkel, men ny. Man sitter och tänker att det här måste någon ha gjort och visst har det gjorts liknande saker men inte precis så här.

Fördelen med Protothreads är att det blir enklare att skriva, följa och debugga programmen än med trådade program. De senare leder normalt till spagettiliknade flöden där det lätt smyger sig in fel.

– Vi har tittat på ett antal program som varit komplexa tillståndsmaskiner. I princip går det att ta bort alla tillstånd och tillståndsövergångar.

Används av industrin
Med Prototreads blir programmen upp till 30 procent mindre och man kan också hitta fel som inte upptäcks tidigare. Protothreads används i en rad kommersiella produkter.

– ABB använder det i en vibrationssensor, säger Adam Dunkels och tar fram mobilen för att visa en bild på vad som ser ut som ett litet cylindriskt USB-minne.

Ett annat exempel är en tillverkare av digital-tv-boxar. I det fallet handlar det förutom om enkelheten med Protothreads även om möjligheten att enkelt flytta programvaran mellan olika målsystem. Företaget har ett utvecklingssystem som kör Linux, tv-boxen har ett realtidsopeartivsystem och så finns det en nedskalad varianten av boxen.

– Normalt är det krångligt att portera eftersom det finns små, små skillnader mellan målsystemen. Program skrivna i Protothreads blir exakt likadana eftersom de bygger på C-kod och inte assembler.

Att det fungerar beror på att man med Protothreads låter C-kompilatorn omvandla trådbiblioteket direkt till en tillståndsmaskin.

– Jag satt och bökade med programmeringen av IP-stacken när jag kom på det.

Så övergången från den minimala IP-stacken till programmeringsabstraktioner är inte så stor som det i förstone kan verka.

– Jag försöker hålla isär saker även om de hänger ihop.

Prototrådarna är också en del av det minimala operativsystemet Contiki som är hans senaste projekt. Men att Prototrådarna har fler användare beror inte bara på att de funnits längre än operativsystemet.

– Det kallas för the Hollywood principle. Don’t call us, we’ll call you och handlar om vem som anropar vem.

Enligt Adam Dunkels är det lättare att få programmerare att anamma en IP-stack eller ett trådbibliotek än att byta operativsystem.

Contiki som nyligen fyllde fem år innehåller IP-stacken uIP men även radiostacken Rime. Operativsystemet är anpassat till bland annat Texas Instruments MSP430 och x86-processorer men det finns företag som använder operativsystemet på Atmels AVR-processor och på Hitatchis HC12.

– En av de coolaste sakerna med Contiki är att det mäter energiförbrukningen.

Finessen kan användas för att studera vad som konsumerar strömmen i till exempel en liten trådlös sensornod. Att det fungerar beror på att processorn styr alla funktioner.

Att lyssna tömmer batteriet
Självklart är radion den stora energiboven, inte processorn, men alla är nog inte medvetna om att det kostar lika mycket eller mer att lyssna än att sända. I den radiomodul som används på Sics för 802.15.4, den radiostandard som bland annat Zigbee bygger på, går det år 20 mA vid lyssning och
18 mA vid sändning.

Det här innebär att en batteridriven Zigbeenod i praktiken bara kan användas i ett stjärnnät med en basstation som samlar in data. Konfigurerar man istället ett meshnät, där noderna vidarebefordrar informationen innan den hamnar i insamlingspunkten, tar batteriet snabbt slut.

– Saab gjorde ett försök där de använde Zigbeenoder för att skydda ett Jasplan men batteriet räcker bara några dagar.

Problemet är att noderna måste gå upp och lyssna ganska ofta för att veta om någon av de andra noderna vill skicka ett paket som sedan ska vidarebefordras. Hur ofta beror bland annat på vilken responstid man vill att systemet ska ha och hur noggranna klockor är.

– Jag är övertygad om att det går att förbättra.

Genom att kontinuerligt mäta strömförbrukningen vet varje nod hur mycket batterikapacitet det finns kvar. Informationen kan användas för att dynamiskt förändra protokollet. Men även operativsystemet kan hjälpa till att sänka strömförbrukningen.

– Man kan se operativsystemet som ett program som hjälper mig att göra andra program, det vill säga att implementera protokollet.

Genom att bygga funktioner som att skicka från en till alla, från en till bara en eller från många till en slipper programmeraren bekymra sig om detaljerna.

– Man lyfter abstraktionsnivån. I slutändan trillar det ut ett kommunikationsprotokoll som till exempel kan vara 6lowpan eller Zigbee.

Ett antal av dessa kommunikationsmetoder finns implementerade i Contiki.

En annan effekt av att låta operativsystemet ta hand om delar av det som protokollet normalt sköter är att man då kan komma åt information som finns i huvudet och försvinner vid avkodningen. Det kan vara uppgifter om signalstyrka, tidsstämplar, avsändare och annat som kan användas för att optimera energiförbrukningen i hela systemet.

– Många tror att det blir långsammare att göra så här men det är ingen mätbar skillnad.

En pikant detalj med de sensormoduler som finns att köpa från till exempel Texas Instruments och Atmel är att det tar längre tid att kopiera data från styrkretsen än att skicka iväg dem med radiodelen. Det beror på att radiokretsarna har en SPI-buss som inte klarar mer än 180 kbit/s. Radiodelen däremot toppar på 250 kbit/s.

– Ska man dessutom utföra multihopp, skicka datapaketen via flera noder till en insamlingspunkt, sjunker den effektiva datahastigheten till 10 kbit/s.

Förladdning ökar datahastigheten

Det finns olika sätt att öka datahastigheten. Drar man ned paketstorleken kan man komma upp i 20 kbit/s. Kör man över flera radiokanaler och undviker interferens kan man nå 60 kbit/s. Men eftersom man inte kan lyssna och skicka samtidigt med dessa radiomoduler ligger den teoretiska maxhastigheten strax under 112 kbit/s om man dessutom tar hänsyn till att man måste ha en liten preamble och checksumma.

En lösning är att förladda radion med nästa paket och sedan skicka iväg det så fort den tagit emot ett nytt paket.

– De är återigen en abstraktionsnivå som man kan lägga i operativsystemet.

Forskningsresultaten finns alla tillgängliga som öppen källkod via Sics hemsida men har och resulterat i en doktorshatt.

– Det är en extra bonus med att jobba på ett sånt ställe som Sics.

I februari fick han Chester Carlson-priset av Ingenjörsvetenskapsakademien. Priset är uppkallat efter Xerox grundare, svenskättlingen Chester Carlson

– Det var otroligt roligt och ett erkännande även om det var för grejor jag gjorde runt 2001 och 2002.

I början av april var det Microsofts tur att prisa honom när han tilldelades Roger Needham-priset.

Utmärkelserna har medfört att han hamnat i det mediala rampljuset vilket säkert kan vara bra om han gör allvar av sina funderingar kring att starta ett företag baserat på forskningsresultaten.

– Det skulle vara roligt att göra och det intresserar mig allt mer. Men det är svårt att sälja plattformsprogramvara som en cd i en kartong. Det är bara Microsoft som lyckats med det.

Och programvaran som Adam Dunkels utvecklat finns redan som öppen källkod.

– Det finns gott om saker runt omkring den där folk vill ha koll utan att behöva hålla på med tekniken. Det är bara en styrka att programvaran är öppen och att den sprids.