Proprietært system

1.1 Historien om denne bog og hvad du får ud af at læse den

I løbet af ca. et år, efter at have færdiggjort min første bog, genoplivede jeg et gammelt kæledyrsprojekt om at bygge en autonom ubåd (kaldet E-2-projektet) med visse ret udfordrende funktionskrav. I forbindelse med udviklingen af denne idé brugte jeg mange timer på internettet og andre steder på at undersøge teknikker til hurtig udvikling af forskellige elektromekaniske kontrolsystemer og platforme til at køre ret komplekse signalbehandlingsalgoritmer. Selv om der naturligvis er tusindvis af nyttige projekter og informationsstumper at hente på internettet og i bøger om hobbyrobotter, fandt jeg ud af, at ingen andre syntes at have de samme prioriteter som mig. Især er der tilsyneladende ikke nogen enkelt reference, der samler i det mindste indledende løsninger på alle de indlejrede designproblemer, der berørte mit projekt: et behov for at anvende billige (open source) værktøjer og operativsystemer, et krav om flere funktioner med ret hårde realtidskrav og et ønske om at anvende billige, standardkomponenter af forbrugerkvalitet, hvor det er muligt. De ressourcer, der er til rådighed om mange emner, er enten koncentreret om meget dyre industrikomponenter, der ikke er på hylden, eller om snævert begrænsede systemer, der er bygget op omkring en enkelt mikrocontroller med fint optimeret, ikke-portabel kode til styring af perifere enheder – og med et meget begrænset udvalg af perifere enheder, der understøttes. Sidstnævnte begrænsninger i systemdesignet er uundgåelige, når man arbejder med stramme strømkrav, pladsbegrænsninger eller en meget lav BOM-pris (Bill of Material), men det er en uforholdsmæssig stor indsats at bygge og indstille sådanne systemer til et engangsprojekt eller en prototype. Desuden er det en enorm opgave at lære alle de detaljer, der er nødvendige for at samle et sådant system, og det er let at fortabe sig i at finjustere detaljerne uden at det nogensinde lykkes at få et komplet, fungerende system i brug. Irriterende nok skal mange af de finjusteringer og det meste af den omhyggelige planlægning, man foretager for at få dette system til at fungere, smides væk, hvis man går over til egentlig produktion, eller hvis man skal bygge nogle flere enheder med lidt andre komponenter.

Det, jeg søgte efter, mens jeg udviklede E-2-projektet, var en måde at bygge forskellige hårde realtidsmoduler (sensorer og aktuatorer) på, som nemt og billigt kunne forbindes med en universalcomputer, der kører Linux. Linux-boksen fungerede som et testbed for algoritmer, som senere ville blive porteret ned i et mindre, køligere og mere strømbesparende behandlingsmodul af en art. Jeg havde brug for et solidt grundlag af kendt god kode og teknikker, så jeg kunne gå ud fra dette punkt og bygge mit eget tilpassede system. Jeg ville også gerne have en simpel op-og-ned-vejledning til at bygge indlejrede Linux-distributioner. I den første, ikke-feltbare prototype af min ubåd havde jeg ikke en nøjagtig idé om, hvor mange CPU-hestekræfter jeg ville få brug for i den endelige version – så jeg ønskede ikke at blive bundet til en bestemt mikrocontroller-arkitektur, og jeg ønskede heller ikke at gå i stå i forsøget på at finjustere og indstille mange realtidsopgaver på en enkelt mikrocontroller. Jeg ønskede også at bruge nogle få perifere enheder – f.eks. kameraer – som nemmest kan forbindes via et generelt styresystem.

Disse krav kan måske lyde som en akkord i dit eget arbejdsliv. Der er stor sandsynlighed for, at du er stødt på situationer, hvor det ville være nyttigt at automatisere et eller andet langvarigt dataindsamlingseksperiment eller skabe en simpel automatiseret styring til en programmerings-, fremstillings- eller anden opgave. I denne forbindelse er der tre andre tilfælde, hvor jeg har anvendt teknikkerne i denne bog:

Udviklingen af en række vellykkede (kommercielt udbredte) netværksbaserede multimedieapparater, der er beregnet til uovervågede reklame- og kunstgallerianvendelser.

Udviklingen af specialiserede, næsten helt automatiske apparater til afprøvning af mekaniske fejl i forbindelse med visse artikler inden for forbrugerelektronik.

Bygning af en automatisk højhastighedsdatalogger, der overvåger en radiolink og uddrager DTMF-meddelelser målrettet mod bestemte modtagere.

Det andet punkt ovenfor er af særlig interesse, fordi det fint demonstrerer, hvordan denne bog kan være af praktisk værdi i forbindelse med processtyring og prøvning. I 2002 arbejdede jeg kortvarigt for en lille afdeling af en multinational virksomhed, hvis hovedfokus var husholdnings- og kontorartikler af plast. Det var meget lærerigt at undersøge deres automatiserede testfittings – proprietære systemer – og sammenligne omkostningerne og kompleksiteten i opsætningen af disse fixturer med de relativt lave omkostninger og den relativt lave opsætningstid for en simpel Linux-baseret SBC, der styrer de samme pneumatiske aktuatorer og sensorer. Det er klart, at der er et underudnyttet marked for billige testsystemer af denne type. De proprietære systemer, der anvendes på dette anlæg, kostede næsten 20.000 USD for et halvt dusin aktuatorer og de tilhørende PLC’er plus utallige timers opsætningstid1. Kontrolsoftwaren til disse enheder var specialiseret og ikke velforstået; faktisk stod det meste af dette udstyr ubenyttet hen, fordi de personer, der oprindeligt havde konfigureret det, havde forladt virksomheden. I modsætning hertil kunne de samme opgaver let udføres med en almindelig pc, der kun kostede et par hundrede dollars plus måske 200 dollars pr. aktuator for den tilhørende pneumatik. Endnu vigtigere er det, at kontrolsoftwaren til et sådant system er et simpelt C-program, der let kan forstås og tilpasses af enhver kompetent datalogi eller elektronikingeniør; der var flere kandidater let tilgængelige i virksomhedens laboratorium.

På grund af arten af den forskning, der førte til denne bogs begyndelse, har jeg medtaget et drys af søfartsdetaljer i teksten, hvoraf ikke alle er direkte relevante for den indlejrede ingeniør. Hvis dette materiale ikke er af interesse, kan du roligt ignorere det uden at det på nogen måde går ud over din forståelse af den resterende tekst. Grunden til, at disse oplysninger er medtaget sammen med den “rene” diskussion om indlejret udvikling, er først og fremmest for at illustrere de krav og overvejelser fra den virkelige verden, der førte til forskellige designbeslutninger i E-2-projektet. Ingeniørvidenskab er ikke teoretisk videnskab; det er en anvendt disciplin, og det er med dette for øje, at jeg bruger specifikke eksempler til at illustrere teoretiske pointer.

Du bør også bemærke, at nogle af de holdninger, der kommer til udtryk i denne bog, om end ikke ligefrem kontroversielle (undtagen efter Usenet-standarder – alt på Usenet er kontroversielt!), så i det mindste er diskutable; f.eks. valget af AVR som min realtidsstyringsplatform. Derfor har jeg givet en yderligere begrundelse for de beslutninger, jeg har truffet i denne tekst. Denne supplerende forklaring skal vise de grunde, jeg havde til at vælge bestemte veje, men den er udtrykkeligt ikke beregnet til at missionere for AVR over for folk, der har erfaring med og foretrækker en anden arkitektur. Igen, dette “bonusmateriale” er ikke afgørende for din forståelse af de grundlæggende begreber, der præsenteres her, og du kan roligt springe det over, hvis du ønsker det.

Og husk også på, at denne bog med vilje ikke er en “bibel”. Den er ikke en udtømmende dækning af hver eneste nuance af de behandlede emner; et sådant værk ville strække sig over flere hylder. Det primære mål med denne bog er at beskrive og illustrere en enkel, modulær og billig metodologi til implementering af komplekse indlejrede systemer og at præsentere nogle færdige moduler, som læseren kan tilpasse til sine egne projekter. Der lægges særlig vægt på at realisere end-to-end-løsninger ved hjælp af billigt udviklingshardware og gratis softwareværktøjer. Når du når frem til de sidste sider, har du forhåbentlig følgende:

En funktionel forståelse af de kritiske “under-the-hood”-detaljer, der er nødvendige for at starte Linux op på x86-platforme.

En introduktion til de typer problemer, du vil støde på, når du bruger indlejrede x86 single-board computere som kernen i datalognings- og bevægelsesstyringssystemer.

Grundlæggende oplysninger om Atmel AVR-mikrocontrollerfamilien.

En praktisk introduktion til opbygning af nogle enkle dataregistrerings- og motorstyringskredsløb og tilslutning af dem til pc’er.

En del grundlæggende “primer”-oplysninger om datasikkerhed, autentificering og pålidelighedsspørgsmål, som de påvirker indlejrede systemer.

Den underliggende idé er, at læseren har rimelig indgående erfaring med det ene eller det andet af emnerne inden for udvikling af Linux-applikationer eller udvikling af dybt indlejrede systemer – denne bog er designet til at sætte dig op på forkant med din læringskurve med det væsentlige fra den side af ligningen, som du mangler. Den giver også den lim, der binder disse stykker information sammen i den overordnede kontekst af et ret komplekst projekt. Bemærk i øvrigt, at jeg har brugt det titulære ord “kogebog” med en vis tilbageholdenhed. Ren kogebogsteknik – at sætte dårligt forståede dele sammen som Capsela-kugler – er aldrig god praksis. I denne bog giver jeg dig nogle Capsela-stykker, der er klar til brug, men jeg fortæller dig også, hvordan og hvorfor jeg har lavet tandhjulene og akslerne i hvert stykke, og til en vis grad, hvordan du selv kan gå videre og lave bedre stykker. Disse forklaringer er meget vigtigere end tegningerne til selve stykkerne.

Når man planlægger en bog som denne, er det let at falde i en af to fælder: enten at lave en enkelt, monolitisk “mega-applikation”, som illustrerer alle de ønskede punkter, men som er ekstremt svær at forklare kortfattet, eller på den anden side at bryde emnet ned i mange små abstrakte noter, som mange læsere vil have svært ved at integrere i projekter i den virkelige verden. Jeg har forsøgt at styre mellem disse to yderpunkter ved at bryde de mere interessante moduler i E-2 projektet op i et par små, praktiske applikationer sammen med stort set selvstændig kode og nok teori til at ændre og udvide disse applikationer til eget brug.

Endeligt en note til folk, der ejer min tidligere bog, Embedded System Development on a Shoestring. Denne bog er ikke designet til at være en efterfølger til dette bind, men det er bestemt relateret materiale. Hvis du følger teknikkerne i denne bog for at bygge en prototype-enhed, og du senere ønsker at presse den ned til en optimeret single-chip-løsning, vil mit tidligere arbejde hjælpe dig med at forstå, hvordan du kan bruge gratis GNU-værktøjer til at få din software let porteret over på en ARM-mikrocontroller. De vigtigste kritikpunkter, jeg fik for den tidligere bog, var, at den skulle dække et bredere spektrum af oplysninger, og at der var for få illustrationer, hvilket gjorde den til en temmelig tør læsning. Jeg har lyttet til disse kommentarer, og jeg håber, at du vil finde, at denne bog opfylder dine behov i begge henseender. Som altid er dine kommentarer og forslag velkomne; du kan sende mig en e-mail på eller besøge mit websted på http://www.zws.com/.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.