9789144157702

Page 1

Inbyggda system med RISC-V

ANDERS CAJANDER


Kopieringsförbud

KOPIERINGSFÖRBUD Detta verk är skyddat av upphovsrättslagen. Kopiering,

Detta verk är skyddat av upphovsrättslagen. Kopiering, utöver lärares utöver lärares och studenters begränsade rätt att kopiera och studenters begränsade rätt att kopiera för undervisningsändamål för undervisningsändamål enligt Bonus Copyright Access enligt Bonus Copyright Access kopieringsavtal, är förbjuden. kopieringsavtal, är förbjuden. För information om avtalet För information om avtalet hänvisas till utbildningsanordnarens hänvisas till utbildningsanordnarens huvudman eller Bonus huvudman eller Bonus Copyright Access.

Copyright Access.

Vid utgivning av detta verk som e-bok, är e-boken kopieringsskyddad.

Vid utgivning av detta verk som e-bok, är e-boken

Den som bryter mot lagen om upphovsrätt kan åtalas av allmän kopieringsskyddad. åklagare och dömas till böter eller fängelse i upp till två år samt bli Den som mot lagen omtillupphovsrätt kan åtalas av skyldig attbryter erlägga ersättning upphovsman eller rättsinnehavare.

allmän åklagare och dömas till böter eller fängelse i upp

Studentlitteratur har både digital och traditionell bokutgivning. till två år samt bli skyldig att erlägga ersättning till Studentlitteraturs trycksaker är miljöanpassade, både när det gäller upphovsman eller rättsinnehavare. papper och tryckprocess.

Studentlitteratur har både digital och traditionell bokutgivning. Studentlitteraturs trycksaker är miljö-

Art.nr 45050både när det gäller papper och tryckprocess. anpassade, ISBN 978-91-44-15770-2 Upplaga 1:1

Art.nr 45050

isbn 978-91-44-15770-2 © Författaren och Studentlitteratur 2022 studentlitteratur.se Upplaga 1:1 Studentlitteratur AB, Lund

© Författaren och Studentlitteratur 2022

Formgivning omslag: Francisco Ortega studentlitteratur.se Foto inledande Studentlitteraturkapitelsidor: AB, Lund Shutterstock Omslagsbild: Shutterstock Omslag: Francisco Författarfoto: LinusOrtega Remahl

The Printer, City 2021 Printed by Eurographic Group, 2022


INNEHÅLL

Förord 13

KAPITEL 1

1.1 1.2 1.3 1.4

Introduktion 16 Motivation 25 Sammanfattning 26 Övningar 26

KAPITEL 2

2.1 2.2 2.3

2.4 2.5 2.6 2.7

Inbyggda system 15

Arkitekturer 27

Bakgrund 28 Huvudprinciper 28 Detaljöverväganden 31 2.3.1 Instruction Set Architecture 31 2.3.2 Var finns programmet? 33 2.3.3 Var finns operanderna? 34 2.3.4 Vilka adresseringsmoder stöds? 37 2.3.5 Instruktionsrepertoar/kodning? 42 2.3.6 Vilken mekanism används för beslut? 45 2.3.7 Hur hanteras I/O? 47 2.3.8 Hur är styrlogiken realiserad? 48 Case study: Intel x86 (licens) 48 Case study: RISC-V (öppen standard) 48 Sammanfattning 49 Övningar 50

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R

5


innehåll KAPITEL 3

3.1 3.2 3.3 3.4 3.5 3.6

Bakgrund 52 Varianter 53 Adressrymd 54 Register 55 Sammanfattning 57 Övningar 57

KAPITEL 4

4.1 4.2 4.3

4.4 4.5 4.6

5.2 5.3 5.4 5.5 5.6 5.7 5.8

6

RISC-V-instruktioner I 59

Principer 60 Reservera minne 62 De första instruktionerna 64 4.3.1 Add Immediate (addi, li, la, nop) 64 4.3.2 Load & Store (lb(u), lh(u), lw, sb, sh, sw) 67 4.3.3 Add & Subtract (add, sub, neg, mv) 68 4.3.4 Jump and Link (jal, j) 70 Verktygskedjan I 72 Sammanfattning 76 Övningar 76

KAPITEL 5

5.1

Introduktion till RISC-V 51

RISC-V-instruktioner II 77

Fler instruktioner 78 5.1.1 Booleska operationer (and(i), or(i), xor(i), not) 78 5.1.2 Shift (sll(i), SRL(i), sRA(i)) 78 5.1.3 Branch 80 Selektion 81 Iteration 83 Case: Medelvärde 83 Subrutiner 86 Case: 4-siffrors decimal räknare 90 Sammanfattning 96 Övningar 96

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R


innehåll KAPITEL 6

6.1 6.2 6.3

6.4

6.5 6.6 6.7 6.8 6.9

Interaktion med omgivningen?! 98 Transducers 98 General Purpose I/O (GPIO) 100 6.3.1 Underlag 100 6.3.2 Elektrisk inkoppling 102 6.3.3 Programmering 108 Reset & Control Unit (RCU) 112 6.4.1 Underlag 112 6.4.2 Programmering 114 Utvecklingsmiljön 114 Drivrutiner? 123 Strömbrytare och lysdiodbank 129 Sammanfattning 133 Övningar 133

KAPITEL 7

7.1

7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9

7.10 7.11

Memory mapped I/O 97

Parallell I/O 135

8 × 8-LED-matris I 136 7.1.1 Elektrisk anslutning 137 7.1.2 Drivrutin 139 Konceptet stack 140 Separation av I/O från applikationsspecifik kod 141 Räknare (timers) 142 8 × 8-LED-matris II 144 7-segments-displayer 148 Liquid-crystal display (LCD) 149 Ännu fler instruktioner 151 Tangentbord 152 7.9.1 Elektrisk anslutning 153 7.9.2 Drivrutin 154 Sammanfattning 161 Övningar 161

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R

7


innehåll KAPITEL 8

8.1 8.2 8.3 8.4 8.5

Metod 1: C-kod interagerar direkt med Assembler-kod 164 8.1.1 Look-up table 165 Metod 2: C-kod interagerar med HW via funktionsbibliotek 167 Main event/run loop 168 Hinner MCU:n med allt? 169 Sammanfattning 171

KAPITEL 9

9.1 9.2

10.2

10.3

11.2

8

D/A-omvandling 179

D/A – spänningsmetoden 180 10.1.1 Arbetssätt 180 10.1.2 Byggblock 181 10.1.3 Gränssnitt 182 D/A – effektmetoden 187 10.2.1 Arbetssätt 187 10.2.2 Byggblock 188 10.2.3 Gränssnitt 189 10.2.4 Filtrering 194 10.2.5 Motorstyrning 196 Sammanfattning 197

KAPITEL 11

11.1

Tillståndsmaskiner 173

Sammanfattning 177 Övningar 177

KAPITEL 10

10.1

C-programmering 163

A/D-omvandling 199

Arbetssätt 200 11.1.1 Byggblock 203 11.1.2 Gränssnitt 204 Sammanfattning 210

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R


innehåll KAPITEL 12

12.1

Sammanfattning 217

KAPITEL 13

13.1 13.2 13.3 13.4

15.3

Filter 229

Samplingsteoremet 230 Medelvärde 231 Avancerade filter 231 FIR 232 IIR 233 Praktiska tips 241 Sammanfattning 242

KAPITEL 15

15.1 15.2

Avbrott 219

Generellt 220 Control and Status Register 222 Call Back Routines 223 Sammanfattning 227

KAPITEL 14

14.1 14.2 14.3 14.4 14.5 14.6 14.7

Återkopplade reglersystem 211

Seriell I/O 243

Introduktion 244 Serial Peripheral Interface (SPI) 246 15.2.1 Allmänt 246 15.2.2 Protokoll 247 15.2.3 Hårdvarustöd 247 15.2.4 ST7735 160 × 80 Pixel TFT 248 15.2.5 API 250 15.2.6 Secure Digital Card (SD Card) 257 Inter Intergrated Circuit (I2C) 258 15.3.1 Allmänt 258 15.3.2 Hårdvarustöd 260 15.3.3 ICM-20600: A 6-axis Motion TraCKING Device 261 15.3.4 PCF8574 8-bit I/O Expander 262 15.3.5 API 264 15.3.6 SMART CARD 265

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R

9


innehåll

15.4

15.5

15.6 15.7

15.8

15.9 15.10

Controller Area Network (CAN) 267 15.4.1 Allmänt 267 15.4.2 Hårdvarustöd 269 15.4.3 API 270 RS-232/V24 270 15.5.1 Allmänt 270 15.5.2 Hårdvarustöd & API 272 RS-422 & RS-485 281 15.6.1 Allmänt 281 1-Wire 281 15.7.1 Allmänt 281 15.7.2 Hårdvarustöd 283 Trådlösa tekniker 283 15.8.1 Allmänt 283 15.8.2 Blåtand / Bluetooth 284 Sammanfattning 287 Övningar 287

KAPITEL 16

16.1 16.2

16.3

Introduktion 290 FreeRTOS 292 16.2.1 Allmänt 292 16.2.2 Distribution 293 16.2.3 Inställningar 294 16.2.4 Datatyper och notation 294 Sammanfattning 295

KAPITEL 17

17.1 17.2 17.3

10

Uppgiftshantering och schemaläggning 297

Introduktion 298 Task Management 300 Sammanfattning 304

KAPITEL 18

18.1

Realtidsoperativsystem 289

Minneshantering 305

Sammanfattning 310 © F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R


innehåll KAPITEL 19

19.1 19.2 19.3 19.4

Lås (Lock) 312 Semaforer (Semaphores) 313 Köer (Queues) 314 Sammanfattning 315

KAPITEL 20

20.1

Direct Memory Access (DMA) 317

Sammanfattning 320

KAPITEL 21

21.1

Trådkommunikation 311

Filsystem 321

Sammanfattning 325

Litteraturförteckning 327

BILAGA A

Binära talsystemet 331

BILAGA B

Boolesk algebra 341

BILAGA C

Programmeringsspråket C 345

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R

11



KAPITEL 1

Inbyggda system


1 inbyggda system

1.1 Introduktion Välkommen till en bok om inbyggda system (eng: embedded systems), det vill säga en bok om alla elektriska ting i vår värld som du inte tycker är en dator, men som i själva verket styrs av en dator! Ja, du läste rätt: i dag finns det en (eller flera) dator i nästan varje elektrisk pryl, från pacemakern, tandborsten, brandlarmet, dörrlåset, mikrovågsugnen, mobiltelefonen och bilen till de bilar som kör omkring på Mars. Redan 2009 gjordes en uppskattning att cirka 98 procent av alla tillverkade processorer användes till inbyggda system, och det finns ingen anledning att tro att det ska minska: till exempel har du säkert hört talas om företeelsen sakernas internet (eng: Internet of Things) där snart ”allt” kommer att vara uppkopplat, se figur 1.1 (Barr, 2009).

Smarta hem Smarta maskiner

Uppkopplad

Smarta fordon

Smarta kläder

Sakernas internet

Digital assistent Plats/ Smarta situationsarbetspl. baserade tjänster

Smart elektronik Smart elnät

Smarta städer

Sakernas internet. I en nära framtid kommer i stort sätt varje elektrisk produkt att vara uppkopplad. FIGUR 1.1

16

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R


1 inbyggda system

Vad utmärker då ett inbyggt system? Det känns som om det är långt mellan en pacemaker och en bärbar dator, trots att bägge innehåller en processor. Några saker känns uppenbara, se även figur 1.2 (Barr, 2009): 1. Ett inbyggt system har sällan en fullstor bildskärm eller ett fullstort QWERTY-tangentbord. Vi kan säga att det ofta har ett minimalt(/inget) användargränssnitt. 2. Ett inbyggt system har sällan en hårddisk. Programmet finns ofta, mer eller mindre permanent, i någon form av icke-flyktigt minne. Systemet är med andra ord ofta disklöst. 3. Ett inbyggt system förbrukar ofta lite energi, och kan ibland fungera i flera år enbart med den energi som finns i ett vanligt litet 3 V knappbatteri. Med andra ord har det en begränsad effektförbrukning. 4. Ett inbyggt system måste kunna interagera med sin omgivning; det måste ha möjlighet att generera och/eller läsa in både analoga och digitala signaler. 5. Ett inbyggt system löser vanligtvis en uppgift som förvisso kan vara komplex, men ofta ställs också stora krav på effektivitet, tillförlitlighet, stabilitet och reaktionstid. 6. Det är också bra om alla kostnader från idé till produkt kan hållas låga: här kan en tia spela stor roll om produkten ska tillverkas i miljontals exemplar.

Interaktion

Lågt pris Tillförlitligt

Realtid En uppgift

Strömsnålt Stabilt

Disklöst Effektivt

Robust FIGUR 1.2

Min. anv.gränssnitt

Egenskaper som ofta associeras med ett inbyggt system.

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R

17


1 inbyggda system

M C U

Programminne

Dataminne

Mikroprocessor

Mikrofon

A/D

D/A

Högtalare

Knappar

Parallella ingångar

Parallella utgångar

Lysdioder

GSM modem

Seriell kommun.

Seriell kommun.

LCD

En modern MCU är ett kraftpaket med en modern processor med tillhörande program- och dataminne, samt ett stort antal moduler för att kommunicera med omvärlden. Notera det konceptuella flödet i bilden från vänster till höger. Programvaran läser typiskt av anslutna givare, bearbetar inkomna meddelanden och beräknar ny styrinformation och relaterade statusmeddelanden om och om igen med stor noggrannhet, effektivitet och tillförlitlighet. Det är inte omöjligt att hissen du åkte i senast hade ett styrsystem som principiellt såg ut som på bilden. En MCU som kan hantera uppgiften i dag kostar i storleksordningen 5 kr! FIGUR 1.3

Punkterna 1–4 har alla på något vis en koppling till hårdvarans kapacitet. Hur många digitala utgångar behövs, hur många analoga ingångar krävs, hur stort måste dataminnet vara? Punkterna 1–4 antyder också i princip hur alla inbyggda system är uppbyggda, vilket framgår av figur 1.3. Figuren illustrerar också på ett bra sätt skillnaden mellan en mikroprocessor (eng: microprocessor) och en mikrokontroller (eng: micro controller unit, MCU). En mikroprocessor är, precis som namnet indikerar, enbart själva processorn, medan övrig funktionalitet läggs till via extra kretsar. En mikrokontroller (se den röda linjen i figuren) innehåller i princip alltid processorn, 18

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R


1 inbyggda system

instruktionsminne, dataminne och ett stort antal moduler för digital och analog kommunikation med omvärlden. Det är inte ovanligt att MCU:n även innehåller vissa sensorer, till exempel för att mäta temperatur, eller accelerometrar, samt hårdvarustöd för kommunikation som Blåtand eller WiFi. En väl vald MCU, en enda krets och ett litet batteri kan vara allt som krävs för många varianter av inbyggda system. Figur 1.4 ger ett konkret exempel.

Byggblock för bokens MCU: GD32VF103. När kretsen är monterad i enklare kapslar kan inte alla funktioner vara aktiverade samtidigt, ty det finns inte tillräckligt många pinben! Källa: [11, s. 24]. FIGUR 1.4

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R

19


1 inbyggda system

I/O MSC

Boken använder sig av en MCU från GigaDevices Semiconductor Incorporated benämnd GD32VF103. MCU innehåller en kraftfull processor, 32 kiB dataminne och 128 kiB instruktionsminne. Det finns också stöd för upp till 80 digitala in- eller utgångar, hårdvarustöd för en mängd relevanta seriekommunikationsprotokoll samt 2 kanaler för analog till digital till analog omvandling. Kretsen är cirka 1 × 1 cm och kostar cirka 5 kr. För att kunna experimentera med MCU:ns alla funktioner är den monterad på ett kretskort, som kan anslutas till ett något större I/O-kort. I/O-kortet innehåller det mesta som en utvecklare av inbyggda system kommer att komma i kontakt med: där finns allt från drivkretsar för avancerad motorstyrning till en liten LCD-panel. Helheten framgår av figur 1.5.

Det kursboksanpassade laborationskortet, som i själva verket är ett kort med MCU:n som dockas med ett kort med all tänkbar I/O. Uppställningen lämpar sig väl för allt arbete fram till en fungerande första prototyp. I nästa steg placeras MCU:n och enbart den I/O som krävs för den specifika produkten på ett för uppgiften specialdesignat kort, som vanligtvis kan få mycket små dimensioner. FIGUR 1.5

20

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R


1 inbyggda system

Punkten 5 från kapitlets inledning har en koppling till mjukvarans komplexitet. I princip alla inbyggda system är realtidssystem (eng: real time system) på något sätt. I ett realtidssystem spelar lösningens reaktionstid (eng: latency) roll, alltifrån väldigt lite till helt avgörande. Bygger du ett inbyggt system för att mäta temperaturen i ett växthus var 10:e minut för att justera takets vädringsluckor vid behov, så är det ingen katastrof om justeringen skulle släpa efter med en sekund eller två, lösningen sägs vara av typen ett mjukt realtidssystem (eng: soft real time system). Resultatet har ett värde, även om det finns tillgängligt sent, även om värdet minskar med tiden. Motsatsen är till exempel ett inbyggt system som styr krockkudden i bilens ratt. Skulle krockkudden aktivers för sent, är resultatet rent farligt, sämre än om krockkudden inte utlöses alls. Ett sådant system sägs vara av typen ett hårt realtidssystem (eng: hard real time system). Det är uppenbarligen svårare att skriva ett styrprogram som alltid lever upp till hårda sluttidpunkter (eng: deadlines). Ett inbyggt system har ofta en huvuduppgift, men den uppgiften kräver ofta att en mängd deluppgifter utförs på ett ytterst koordinerat sätt. Ganska snart leder det till att mjukvaran blir så komplex att utvecklaren måste ta hjälp av ett realtidsoperativsystem (eng: real time operating system, RTOS)

FIGUR 1.6 Längst till vänster finns det principiella utseendet för kommandoavkodaren (eng: Command Line Interpreter, CLI) från ett vanligt interaktivt c-program. Programmet stannar på den tredje raden och väntar på att användaren ska mata in nästa kommando. Bilden i mitten: Få, om ens något, styrprogram för ett inbyggt system stannar på det sättet. I stället utför superloopen en mängd små uppgifter i sekvens där det är av yttersta viktig att ingen av dessa uppgifter tar lång tid och att de alla returnerar oavsett hur illa det än gått. Koden saknar också något sätt att avsluta, då det inte finns något som kan ta över, superloopen utförs så länge processorn är strömförsörjd. Bilden till höger: Tar styrprogrammet hjälp av ett realtidsoperativsystem kan det finnas flera superloopar där operativsystemet både hjälper till med tidspassning och tillförlitlighet.

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R

21


1 inbyggda system

för att förhoppningsvis få allt att fungera. Det finns med andra ord någon form av komplexitetsdimension här, där utvecklad mjukvara går från ett enkelt självständigt program av superloop-typ (mer om det i kommande kapitel), till att mjukvaran realiseras ovanpå ett realtidsoperativsystem enligt principen samverkande trådar (eng: cooperativ), (prioriterade) tidsstyrda trådar (eng: priority pre-emptive) till händelsestyrda (eng: event) trådar – mer om det i bokens avslutande kapitel om RTOS, se även figur 1.6. Kraven ovan innebär indirekt att styrprogrammet måste vara skrivet i ett språk som medger att utvecklaren, vid behov, ges absolut kontroll över hur olika moment utförs över tiden. Därtill krävs att utvecklaren har tillgång till bland annat en uttömmande beskrivning av MCU:ns processorfunktionalitet, något som brukar benämnas processorns instruktionsarkitektur (eng: Instruction Set Architecture, ISA). Genomgående i boken används maskinnära c-kod och assembler, för en MCU som använder en RISC-V ISA (mer om det redan i nästa kapitel). Till sist implicerar punkten 6, från kapitlets inledning, att det nog kan finnas betydande återkommande- och engångskostnader för ett utvecklingsprojekt. Återkommande kostnader härrör bland annat från valet av produktionsteknik: går det att använda en kommersiellt tillgänglig MCU eller är volymerna så stora (lösningen så unik) att en egen ASIC-lösning är att föredra. När det gäller engångskostnader är nog företagets befintliga kunskapsbank den största tillgången, alternativet kvarnstenen. Det är en substantiell investering, kanske oöverstiglig, att ta till sig en ny teknologi – så att bryta med en känd plattform är inget som ett företag gör lättvindigt, även om plattformen för länge sedan egentligen blivit föråldrad. Det som gör det så kostsamt att byta plattform är att MCU:er av olika fabrikat vanligtvis är mycket olika; därtill är de verktygskedjor som krävs för att utveckla och felsöka i dag verkligen komplicerade. Det är inte bara att hämta sin favoritutvecklingsmiljö för c, skriva klassiska Hello World, och kompilera. Det behövs en så kallad korskompilator som genererar maskinkod för vald MCU, inte för din dators processor. Den genererade koden måste laddas ner till MCU:n innan processorn i MCU:n kan börja utföra instruktionerna. Att felsöka blir en utmaning i sig, då MCU:n ofta saknar både bildskärm och tangentbord. Om något går fel så är ditt program troligtvis vilse efter någon miljondels sekund, och det finns lite du kan göra (Ganssle, 2008)! 22

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R


1 inbyggda system

En typisk arbetsplats för att utveckla program för ett inbyggt system. En dator (eng: host) med rätt utvecklingsmiljö (eng: Integrated Development Environment, IDE) kopplad till ett experimentkort med mål MCU:n (eng: target). Källkoden måste först översättas till maskinkod för målmaskinens processor, som därefter laddas ner i MCU:ns instruktionsminne innan programmet tillåts starta. FIGUR 1.7

Att lära sig en ny MCU med dess verktygskedja är en utmaning (kostnad) oavsett om det är för första gången eller ej, så alla val som är gjorda i boken är gjorda för att introducera koncept och tekniker som – när boken skrivs – verkar ha framtiden för sig, se även figur 1.7. Du inser säkert att ”Hello World” inte är ett bra testprogram för ett inbyggt system. I stället brukar det första programmet inrikta sig på att blinka en lysdiod. Det är tyvärr betydligt mer komplicerat än det kanske låter för en modern MCU. Rätt moduler måste aktiveras och initieras, förutom att hela verktygskedjan måste fungera. Baksidan av det myntet, eller i detta fall kanske framsidan, är att det därigenom faktiskt är ett bra test på att allt fungerar som du tänkt dig. Laborationskortet som hör till kursboken har bland annat en lysdiod kopplat till en potentiellt digital utgång benämnd GPIOA0. Koden i figur 1.8 på nästa sida, som kommer att förklaras i detalj i senare kapitel, är ett exempel på ett ”blinky”-testprogram för kortet och tillhörande utvecklingsmiljö. Till sist: I början av MCU-eran var priset för en enskild MCU en betydande faktor, och MCU:er designades för speciella tillämpningar, men dagens MCU:er är generellt så generella, kraftfulla och prisvärda att behovet att kate© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R

23


1 inbyggda system

Ett minimalt ”blinky”-program i c-kod. Koden visas enbart som ett exempel på hur c-kod för ett inbyggt system principiellt kan se ut. Koden har beroenden till flera kodbibliotek som tillhandahålls av MCU-leverantören GigaDevices. Koden kommer att förklaras efterhand. För stunden kan det räcka att notera att koden ofta kräver omfattande kommentarer och arbetar frekvent med enskilda bitar i dataord! FIGUR 1.8

gorisera MCU:er inte längre är lika stort. Det finns speciella MCU:er, speciellt inom signalbehandlingsområdet (eng: digital signal processing, DSP), där utvecklingsmiljön ofta är mycket kostsam – men i övriga fall räcker det nog med att tänka över vilka hårdvaru-, mjukvaru- och produktionsbehov det kommande projektet har för att hitta rätt. Kuriosa: Färddatorn i Apollo-programmets månlandare brukar nämnas som ett av de första inbyggda systemen. Datorn var byggd av enbart 3-ingångars NOR-grindar för att minimera risken för fel, styrprogrammet var översatt till maskinkod (eller i alla fall kontrollerat) för hand! Prestanda: • • • •

2 MHz, 36 kB ROM, 2 kB RAM 240 digitala in- och utgångar 61 × 32 × 17 cm 55 W

Priset per enhet är inte känt men det var astronomiskt. Det är i dag lätt att hitta en prestandamässigt likvärdig MCU, till exempel Microchips 18F8520, men den kommer i en 12 × 12 × 1 mm kapsel, som maximalt drar 1 W, för cirka 5 kr! 24

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R


1 inbyggda system

FIGUR 1.9

Färddatorn utvecklad för Apollo-programmet och MCU från Microchip. Källa: NASA.

1.2 Motivation Den här boken har som ett mål att presentera grunderna för att bli en driven utvecklare av inbyggda system. Att utveckla programvara för ett inbyggt system kräver djup insikt i de begränsningar som ett sådant system trots allt har, i synnerhet om utvecklingsarbetet sker i ett högnivåspråk – då den faktiska resursförbrukningen ofta har abstraherats bort. Inbyggda system hanterar ofta tidskritiska processer som ställer ytterligare krav på den som ska utveckla programvaran. Sådana kan vara ytterst besvärliga att säkerställa. Att handskas med knappa resurser och tidskritiska processer är också fundamentalt för den som senare ska fördjupa sig i uppbyggnaden av moderna operativsystem. Att ge dylik insikt för fortsatta studier i programmering i allmänhet och operativsystem i synnerhet är bokens andra målsättning. Det kan knappast beskrivas bättre än i följande citat från New York Times där Googles talesman dr Norvig förklarar vikten, och vidden av, insikt i vad som faktiskt händer med en referens till KTH:s FIGUR 1.10 Donald Knuth. hedersdoktor Donald Knuth (se figur 1.10): Källa: CC-SA-BY Alexandra Dorfina.

”But other times, if you’re serving billions of users, it’s important to do that efficiently. A 10 percent improvement in efficiency can work out to billions of dollars, and in order to get that last level of efficiency, you have to understand what’s going on all the way down.”

© F Ö R FAT TA R E N O C H S T U D E N T L I T T E R AT U R

25


Inbyggda system med RISC-V Den här boken presenterar grunderna för att bli en driven utvecklare av inbyggda system. Den ger också den förståelse som krävs för fortsatta studier i programmering i allmänhet och operativsystem i synnerhet. Inbyggda system finns i stort sett i varje elektrisk pryl, från tandborsten, brandlarmet och dörrlåset till en modern bil. Systemet kan sägas vara en dator som både av kostnads- och utrymmesskäl måste innehålla i stort sett alla nödvändiga funktioner i en enda krets, en mikrocontroller (MCU). Inbyggda system med RISC-V behandlar både programmering av en RISC-V MCU och hur den ansluts till en mängd vanligt förekommande I/O-komponenter. Boken består av fem större block där de två första introducerar MCU:ns processor och hur den programmeras i assembler samt digital I/O. I block tre introduceras A/D- och D/A-omvandling inklusive tillämpningar samt avbrott och maskinnära C. Block fyra behandlar seriell kommunikation och block fem ger en inblick i operativsystemet FreeRTOS. Varje kapitel avslutas med en sammanfattning, till en del kapitel finns även övningar. Inbyggda system med RISC-V är avsedd för ingenjörsutbildningar och kräver grundläggande förkunskaper inom ellära, datorns uppbyggnad, digitalteknik och c-programmering. Boken är också riktad mot yrkesverksamma ingenjörer eller driftiga entusiaster som vill ta till sig den senaste tidens rön.

Art.nr 45050

studentlitteratur.se


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.