Design av inbyggda system

Relevanta dokument
Design av inbyggda system

Design av inbyggda system. Innehåll. Hårdvarunära design. Hårdvarunära design. Hårdvarunära design. Hårdvarunära design TDD

Design av inbyggda system

Design av inbyggda system

Design vid utveckling av inbyggda system

Goda råd till de som ska utföra ett liknande projekt (från KMM 2016)

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

PlantPuppy Räddaren för den som inte kan hålla växterna vid liv

RemoteBud. Inlämnas: Patrik Johnsson, e01pjo Viktor Karlsson, e01vk

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Digitalt lärande och programmering i klassrummet

Program & programmering

Föreläsning 2. Operativsystem och programmering

Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,

TPFD - TestPlan Före Design BESKRIVNING AV AKTIVITETER

Växtviskaren EITF11 Digitala projekt VT15, I12

Före Kravspecifikationen

MESI i Intel Core 2 Duo

Digitala Projekt Konstruktion av Tamagocchi. Av: Oskar Andersson D05 & Danial Rehman D05

Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.

Instuderingsfrågor ETS052 Datorkommuniktion

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Programmering eller Datalogiskt tänkande

Föreläsning 3. Programmering, C och programmeringsmiljö

Rapport. Fyra i rad-spel. Rapport Digitala Projekt EITF11 Grupp 9 Emma Rasmusson & Louise Ragnarsson Handledare: Bertil Lindvall

Digitala Projekt (EITF11)

Datorteknik TSIU02 Kursinformation

Introduktion till programmering, hösten 2011

EV3 Roboten. Sida 1 av 13

Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Mekanisk solros, Digitala projekt(edi021) Kristoer Nordvall, Stefan Windfeldt, Inlämmnad: 4 december 2006

Lego Robot [ ] [ ] [ ]

Datorprojekt, del 1. Digitala system 15 p

TDIU01 - Programmering i C++, grundkurs

Föreläsning 3. Programmering, C och programmeringsmiljö

Rapport Digitala Projekt EITF11 Grupp 4 Axel Sundberg, Jakob Wennerström Gille Handledare: Bertil Lindvall

Roboten. Sida 1 av 11

Unix design. Unix är ett operativsystem från mellan 1969 och 1972, beroende på hur man räknar. Unix utvecklas fortfarande.

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Nätverkskopplat djävulskap Digitala projekt 2011 EITF40. Erik Lundh E06

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Föreläsning 6: Introduktion av listor

Pulsmätare med varningsindikatorer

Den här texten ska förhoppningsvis underlätta en del av anpassningarna. Det kan säkert finnas en del fel och annat tok.

Larmcentral. Digitala Projekt. Cecilia Olsson & Erika Björck Handledare: Bertil Lindvall LUNDS TEKNISKA HÖGSKOLA

TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

Digitala projekt - Radiostyrd bil

Digitala Projekt(EITF40) - Larm

DEPARTMENT OF INFORMATION TECHNOLOGY. Digitala Projekt. Redovisning av Projekt - Grupp 14

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Gustaf Backman, Anton Nystedt, Nicholas Peebo Battleships. Lunds tekniska högskola. EITF11 Digitala projekt

Code-Lite tutorial ( /RoJ)

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

The Intelligent Timer

Projektlaboration 4, synkronisering av klockan

Digitala projekt rapport

Goda råd från studenterna som gjorde kandidatprojektet 2018

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Emacs. Eric Elfving Institutionen för Datavetenskap (IDA)

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

PROGRAMMERING AV MCU LABORATION6. Laborationens syfte

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

TDDI02. Programmeringsprojekt. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Multimedia. Multimedia. Datakompression. Annorlunda krav. Inte bara text eller nerladdning av filer. Video, ljud med tidskrav.

Inlämningsuppgifter, EDAF30, 2015

Thunder s Truck projektrapport

Introduk+on +ll programmering i JavaScript

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Department of Information Technology Digitala projekt. SuperKull. Daniel Öhman Alexander Persson

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

+5V. start. Styrsystem. stopp. Tillståndsmaskiner

UML: Exempel. Ett modelleringsspråk. UML: Ansvar. UML: tre huvudanvändningar. Exempel: En klass position storlek. UML Unified Modelling Language

Innehåll. 1 Inledning 3

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Hur BitTorrent fungerar

Laboration i datateknik

729G04 Programmering och diskret matematik. Python 3: Loopar

Programmering A. Johan Eliasson

Kurskatalog 2010 INNEHÅLLSFÖRTECKNING

Programmera Avant 5 med PC mjukvara

Inbyggd elektronik. Övning: Strukturdiagram

Användarhandledning Version 1.2

Projektdirektiv Oskar Ljungqvist Sida 1. Kund/Examinator: Daniel Axehill, Reglerteknik/LiU

Linköpings Tekniska Högskola Institutionen för Datavetanskap (IDA), Software and Systems (SaS) (c) Klas Arvidsson

The Secure Light. Digitala Projekt EITF11. Hanna Tinglöf, I-12 Anna Horvath, I-12 Filippa Österlin, I-12. Handledare: Bertil Lindvall

Datorsystem Laboration 2: Minnesmappade bussar

Labbrapport - LEGO NXT Robot

SKOLFS. beslutade den -- maj 2015.

Digitalt lärande och programmering i klassrummet

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

IT för personligt arbete F6

Sockets. Processkommunikation Sammanfattning. Sockets. Domän, typ och protokoll

Testplanering, test-first, testverktyg

Transkript:

Design av inbyggda system Innehåll Hårdvarunära design Erfarenhet/Utmaningar värda att tänka på Avbrottsrutiner och huvudloopar hantering av gemensamma data Verkligt parallella processer hantering av gemensamma data Kopplingsschema hur och varför 10 sätt att lyckas med ett projekt Designspecar bra / dåligt / hur / varför / när 1

Hårdvarunära design Inbyggt system = man ser inget Hårdvarunära design Systemet byggs samtidigt som man programmerar det Osäkerhet : Ligger problemen i hårdvaran eller mjukvaran? 2

Hårdvarunära design Man behöver ta *SMÅ* utvecklingssteg, justera kompasskursen ofta. Varför? Helheten är svår att överblicka Små delar kan testas lättare Förutsättningar kanske förändras Jämför med återkopplingstiden i reglerloopen Hårdvarunära design TDD : Test Driven Development REFACTOR FAIL TDD PASS FAIL : Skriv ingen kod förrän det tagits fram ett testfall som ännu inte uppfylls PASS : Skriv kod som uppfyller testfallet/en, men inte mer än det REFACTOR : Hyfsa till, strukturera, optimera koden och kontrollera att den fortfarande uppfyller testfallet/en Överdrivet? Kanske Bra: Leder till iterativ testning, ofta, och undviker big-bang-testning [Exempel : I2C] 3

Hårdvarunära design TDD : Test Driven Development N I2C-kommunikation M : Startvillkor M : Adressera slav/w S : Acknowledge M : Skriv data till S S : Acknowledge M : Stoppvillkor JSP-Diagram START COND. I2C SEND ADDRESS I2C I2C PACKET while!ack * STOP COND. DATA TRANSFER Hårdvarunära design JSP : Jackson Structured Programming Sekvens: Först A sen B A S B I2C READ STATUS I2C SEND DATA[N] while N>0 * while!ack * I2C READ STATUS N=N-1 Selektion: A eller B beroende på X Iteration: Först A sen B Så länge N>0 X=0 o A X? X=1 o B While N>0 * A B 4

JSP-Diagram START COND. I2C SEND ADDRESS I2C I2C PACKET while!ack * I2C READ STATUS I2C SEND DATA[N] STOP COND. DATA TRANSFER while N>0 * while!ack * N=N-1 I2C() { I2C_Start_Cond(); I2C_Packet(); I2C_Stop_Cond(); } I2C_Packet() { I2C_Send(ADDRESS); Wait_For_ACK(); Data_Transfer(); } Data_Transfer() { while (N>0) { I2C_Send(DATA[N]); Wait_For_ACK(); N--; } } Programkod I2C READ STATUS Wait_For_ACK() { while (Get_I2C_Status()!= ACK)); } JSP-Diagram START COND. I2C I2C PACKET!! STOP COND. Tydliga subrutiner!!!? START COND. ADDRESS SLAVE+W Flödes-Diagram N=N-1 I2C SEND ADDRESS while!ack * I2C READ STATUS DATA TRANSFER while N>0 * READ I2C STATUS ACK? Y I2C TRANSMIT N N>0? N STOP COND. Y I2C SEND DATA[N] while!ack * N=N-1 READ I2C STATUS I2C READ STATUS ACK? Y N 5

Hårdvarunära design Börja med låga hastigheter öka vid behov Robustare Energisnålare Störningskänsligt Energikrävande Det kan fungera bra att köra med full fart, i början, när det digitala bruset är lågt. Men med mer och mer funktionalitet blir systemet störningskänsligt. Plötsligt kan t ex ytterligare en sensor orsaka att I2C-kommunikationen slutar fungera, trots att det inte hör ihop. Problemet är egentligen relaterat till hastigheten. Hårdvarunära design Spana framåt undvik hinder Är vi på väg åt rätt håll? Leder det här till målet? Är det här en framkomlig väg? Finns det en lättare lösning? Tänk efter före! 6

Hårdvarunära design Se även bakåt ingen del av systemet är färdigt förrän hela produkten är klar Man kan få riva upp och göra om Då är man glad om man tagit små steg Hårdvarunära design Var paranoid! Överallt! Koll på allt! Hela tiden! 7

Avbrottsrutiner och huvudloopar Ett sätt att uppnå realtidsfunktionalitet och virtuell parallelism Avbrottsrutiner och huvudloopar Vilka avbrott ska vi hantera? Vad ska göras i avbrottsrutiner? Vad ska göras i kod som inte är avbrottsrutiner? Vad är lagom mycket för en avbrottsrutin? Hur klarar man krav på timing? Vilka data delas mellan avbrottsrutiner och övrig kod? Hur delas data? En läser och en skriver, båda läser, båda skriver, etc. 8

Avbrottsrutiner och huvudloopar Avbrott i AVR, förutsättningar: Nya avbrott blockeras när avbrottsrutin körs (dvs pågående avbrott avbryts inte) Nya avbrott som inkommer när avbrottsrutin körs latchas/memoreras (en flagga per avbrottsvektor) Vissa variabler kan läsas och skrivas atomärt (dvs accessen av variabeln avbryts inte), andra är icke atomära 9

Avbrott i AVR, atomär läsning av en variabel vid upprepade tillfällen Gemensam variabel mellan ISR (Interrupt Service Routine) och huvudloop int Distance; Variabeln sätt av ISR Avbrott i AVR, atomär läsning av en variabel vid upprepade tillfällen Kod i huvudloop if (Distance < 10) decrease robot speed else if (Distance > 20) increase robot speed else do not change robot speed Vad händer om ISR förändrar Distance mellan avläsningarna? 10

Avbrott i AVR, atomär läsning av en variabel vid ett tillfälle local_distance = Distance; if (local_distance < 10) decrease robot speed else if (local_distance > 20) increase robot speed else do not change robot speed Avbrott i AVR, icke-atomär läsning av en variabel DISABLE_INTERRUPTS; local_distance = Distance; ENABLE_INTERRUPTS; if (local_distance < 10) decrease robot speed else if (local_distance > 20) increase robot speed else do not change robot speed Distance 8 bitar 8 bitar 11

Avbrott, andra typer av scenarier gemensamma data Buffertar avbrottsrutin skriver/läser, huvudloop skriver/läser Gemensamma datablock huvudloop skriver/läser hela block med avbrott stängda (för att säkerställa konsistens av data inom ett block) Dubbelbuffring huvudloop arbetar med kopia, avbrottsrutin arbetar med en annan - avbrottsrutin gör swap genom att flytta pekare huvudloop stänger av avbrott vid läsning av pekare om dessa inte kan läsas atomärt Avbrott - embedded, referensmaterial AVR : Tutorial, GCC m m https://www.mikrocontroller.net/articles/avr Tysk site, men funkar bra med Google translate Artikel på vanheden http://vanheden.isy.liu.se En artikelserie från embedded.com http://bit.ly/svhrih 12

Parallella processer Verkligt parallella processer i flera kärnor Parallella processer Raspberry Pi Sampla Bildbehandla Sampla först -> buffer -> bildbehandla sen? Hinner man bildbehandla mellan bilderna? Knappast! Skippa varannan bild? Dålig framrate! Kan man sampla och bildbehandla samtidigt? Ja, med parallella trådar/processer! På samma buffer, samtidigt? sampla bildbehandla BUFFER Vad händer om sampling skriver samtidigt som bildbehandling läser? Risk för korrupt/inkonsistent data! Hjälper det att stänga av avbrott? Nej! Trådarna/processerna är inga avbrott Kopiera mellan dubbla buffrar? sampla kopiera bildbehandla BUFFER1 BUFFER2 Växla buffrar med pekare? sampla Ja! MEN NÄR??? BUFFER1 BUFFER2 bildbehandla 13

Parallella processer Raspberry Pi Sampla Bildbehandla Trådarna/processerna måste synkroniseras! Trådar : -Har sitt ursprung från samma program -Kan synkroniseras med semaforer -Kan kommunicera via gemensamt/delat minne Process: -Är ett program, skrivet i t ex Python, Java, C -Kan synkroniseras med meddelanden -Kan kommunicera via filer, pipes, sockets I ett operativsystem förekommer många processer, som alla har en viss prioritet. Vilken prioritet behöver sampling och bildbehandling ha? I förhållande till varandra? Sampling högre prio än bildbehandling I förhållande till andra processer i operativsystemet? Beror på situationen, dvs finns det fler viktiga tidskritiska saker som operativsystemet måste hantera Parallella processer //thread1 : sampling while(1) { for (i=0; i<count; i++) buf[bp][i] = sample(); bp = 1 bp; sem_post(&semaphore); } //thread2 : img_processing while(1) { sem_wait(&semaphore); img_process(buf[1-bp]); } Trådar inom samma program, kan kommunicera via gemensamt minne. Synkroniseras med semafor. //process1 : sampling while(1) { for (i=0; i<count; i++) fputc(sample(), FileP[bp]); M.bp = bp; bp = 1 bp; message_send(&m, PORT); } //process2 : img_processing while(1) { message_recieve(&m, PORT) img_process(m.bp); } int img_process(int bp) { data = fgetc(filep[bp]);... Processer i olika program, kan kommunicera via externa filer, lämpligen virtuella i RAM. Synkroniseras med meddelandehantering. 14

Kopplingsschema Kopplingsschema Hur? Varför? Renrita!! Använd rutat papper!! 15

Kopplingsschema Från schema till bygge Vira in en liten del åt gången Bocka av virade trådar i schemat Kopplingsschema Från schema till bygge Ett eller flera virkort... 16

Kopplingsschema Från schema till bygge Parallella ledare... Kopplingsschema Från schema till bygge Anslut reset! Utan reset : svår felsökning! Utan reset : felaktig programmering! 17

Kopplingsschema Från schema till bygge JTAG används för programmering och debugging JTAG-kedja...... eller inte Schemaritningsprogram KiCad www.kicad-pcb.org Open Source via GNU GPL v3 EAGLE https://www.autodesk.com/products/eagle/ Kommersiell, men gratis för mindre storlekar (80 cm^2) av konstruktioner Mentor - Expedition PCB Cadence - Allegro PCB Altium - PCB Designer Kommersiella och kompetenta, MEN komplexa med mycket dyra licenskostnader 18

10 sätt att lyckas med ett projekt Baserat på råd från tidigare års studenter 10 sätt att lyckas med ett projekt 1 : Börja i tid 19

10 sätt att lyckas med ett projekt 2 : Gör ordentliga virningar www.bigmessofwires.com 10 sätt att lyckas med ett projekt 3 : Skriv programkoden själv 20

10 sätt att lyckas med ett projekt 4 : Strukturera programkoden int banan22(int banan13, int banan37) { if (banan37 > banan13) then banan13 = banan37*3; else banan13 = banan37-banan13; return banan13; } 10 sätt att lyckas med ett projekt 5 : Använd versionshantering https://gitlab.liu.se https://docs.isy.liu.se/bin/view/vanheden/git Undvik helst GitHub Håll även kopplingsshemat uppdaterat!!! 21

10 sätt att lyckas med ett projekt 6 : Läs databladen 1. Översiktligt 2. Detaljerat 3. Verifiering 10 sätt att lyckas med ett projekt 7 : Verifiera komponentens funktion ur databladet REKLAM VERKLIGHET 22

10 sätt att lyckas med ett projekt 8 : MÄT! Logikanalysatorlab Tre tillfällen, gå på ett av dom Anmälan på listor utanför Muxen Zu messen ist zu wissen 10 sätt att lyckas med ett projekt 9 : Samarbeta Kommunicera! Färdig med veckans arbete i förväg? Tar man helg då? Sjuk? Berättar men det först när man är tillbaka igen? Alla har ett gemensamt ansvar! 23

10 sätt att lyckas med ett projekt 10 : Konstruera och lös problemen steg för steg Designspecar Checklista för designspec => Exempel på designspecar => + Fokus på hårdvaran + Pseudokod som bilaga + Upprepa inte datablad Inlämningstid Senast 8/3 kl 16:00 ska en första version av designspecen vara inlämnad till handledaren Senast 15/3 ska designspecen kunna vara godkänd av handledaren 24

Designspecifikation : Förslag på arbetsordning 1 : Kopplingsschema - Så detaljerat som möjligt - Ta bort ovidkommande information - Vilken / vilka bussar är lämpliga / krävs? - Namnge signaler och bussar - Planera in anslutning för JTAG samt reset - Behövs nivåkonvertering? 5V <-> 3V 2 : Datastrukturer - Hur ska data lagras? - Vad ska skickas? - På vilken form? Rådata eller SI-enheter? - Behövs nåt protokoll, paketering av data? 3 : Programflöde / struktur - Vad ska vara avbrott? - Vad passar i huvudloopen 4 : Beskrivande information - Textuell - Bilder / figurer 25