Design vid utveckling av inbyggda system Föreläsning i KMM, 2013-10-11
Innehåll Hårdvarunära design Avbrottsrutiner och huvudloopar Kopplingsschema Designspec
Dagens föreläsning Hårdvarunära design - värt att tänka på Avbrottsrutiner och huvudloopar - hantering av gemensamma data Kopplingsschema - Hur och varför Designspec - bra / dåligt / hur / varför / när
Hårdvarunära design Innehåll Hårdvarunära design Avbrottsrutiner och huvudloopar Kopplingsschema Designspec
Hårdvarunära design Hårdvarunära design Inbyggt system = man ser inget Systemet byggs samtidigt som man programmerar det Man behöver ta *SMÅ* utvecklingssteg Börja med låga hastigheter - öka vid behov Spana framåt - undvik hinder Se bakåt - ingen del av systemet är färdigt förrän hela systemet är klart Var paranoid!
Hårdvarunära design Hårdvarunära design Inbyggt system = man ser inget Systemet byggs samtidigt som man programmerar det Man behöver ta *SMÅ* utvecklingssteg Börja med låga hastigheter - öka vid behov Spana framåt - undvik hinder Se bakåt - ingen del av systemet är färdigt förrän hela systemet är klart Var paranoid!
Hårdvarunära design Hårdvarunära design Inbyggt system = man ser inget Systemet byggs samtidigt som man programmerar det Man behöver ta *SMÅ* utvecklingssteg Börja med låga hastigheter - öka vid behov Spana framåt - undvik hinder Se bakåt - ingen del av systemet är färdigt förrän hela systemet är klart Var paranoid!
Hårdvarunära design Hårdvarunära design Inbyggt system = man ser inget Systemet byggs samtidigt som man programmerar det Man behöver ta *SMÅ* utvecklingssteg Börja med låga hastigheter - öka vid behov Spana framåt - undvik hinder Se bakåt - ingen del av systemet är färdigt förrän hela systemet är klart Var paranoid!
Hårdvarunära design Hårdvarunära design Inbyggt system = man ser inget Systemet byggs samtidigt som man programmerar det Man behöver ta *SMÅ* utvecklingssteg Börja med låga hastigheter - öka vid behov Spana framåt - undvik hinder Se bakåt - ingen del av systemet är färdigt förrän hela systemet är klart Var paranoid!
Hårdvarunära design Hårdvarunära design Inbyggt system = man ser inget Systemet byggs samtidigt som man programmerar det Man behöver ta *SMÅ* utvecklingssteg Börja med låga hastigheter - öka vid behov Spana framåt - undvik hinder Se bakåt - ingen del av systemet är färdigt förrän hela systemet är klart Var paranoid!
Hårdvarunära design Hårdvarunära design Inbyggt system = man ser inget Systemet byggs samtidigt som man programmerar det Man behöver ta *SMÅ* utvecklingssteg Börja med låga hastigheter - öka vid behov Spana framåt - undvik hinder Se bakåt - ingen del av systemet är färdigt förrän hela systemet är klart Var paranoid!
Avbrottsrutiner och huvudloopar Innehåll Hårdvarunära design Avbrottsrutiner och huvudloopar Kopplingsschema Designspec
Avbrottsrutiner och huvudloopar Avbrottsrutiner och huvudloopar Vilka avbrott skall vi hantera? Vad skall göras i avbrottsrutiner? Vad skall göras i kod som inte är avbrottsrutiner? Vad är lagom mycket att göra i en avbrottsrutin? Hur klarar vi krav på timing? Vilka data delas mellan avbrottsrutiner? Vilka data delas mellan avbrottsrutiner och kod som inte är avbrottsrutiner? Hur delas data? En läser och en skriver, båda läser, båda skriver och läser, etc.
Avbrottsrutiner och huvudloopar Antaganden Avbrott är avstängda när avbrottsrutin körs Avbrott som inkommer när avbrottsrutin körs latchas (ett avbrott per vektor) Vissa variabler kan läsas och skrivas atomärt
Avbrottsrutiner och huvudloopar Atomär läsning av en variabel vid upprepade tillfällen Gemensam variabel mellan ISR och huvudloop int Direction; Variabeln sätts av ISR
Avbrottsrutiner och huvudloopar Atomär läsning av en variabel vid upprepade tillfällen Kod i huvudloop if (Direction > 0) { increase robot speed } else if (Direction < 0) { decrease robot speed } else { do not change robot speed }
Avbrottsrutiner och huvudloopar Atomär läsning av en variabel vid ett tillfälle local_direction = Direction; if (local_direction > 0) { increase robot speed } else if (local_direction < 0) { decrease robot speed } else { do not change robot speed }
Avbrottsrutiner och huvudloopar Icke-atomär läsning av en variabel DISABLE_INTERRUPTS; local_direction = Direction; ENABLE_INTERRUPTS; if (local_direction > 0) { increase robot speed } else if (local_direction < 0) { decrease robot speed } else { do not change robot speed }
Avbrottsrutiner och huvudloopar Andra typer av scenarier - gemensamma data Buffertar - avbrottsrutin skriver, huvudloop läser Buffertar - avbrottsrutin läser, huvudloop skriver Gemensamma datablock - huvudloop läser/skriver hela block med avbrott avstängda (för att säkerställa konsistens av data inom ett block) Dubbelbuffring - huvudloop arbetar med en 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
Avbrottsrutiner och huvudloopar Referensmaterial Artikel på Vanheden http://bit.ly/xo5fzz En artikelserie från embedded.com - http://bit.ly/svhrih Embedded Gurus - http://embeddedgurus.com/ The Ganssle Group - http://www.ganssle.com/
Kopplingsschema Innehåll Hårdvarunära design Avbrottsrutiner och huvudloopar Kopplingsschema Designspec
Design vid utveckling av inbyggda system Kopplingsschema Kopplingsschema Hur ritar man ett kopplingsschema och varför?
Design vid utveckling av inbyggda system Kopplingsschema Kopplingsschema Från kopplingsschema till bygge I Vira in en liten del åt gången I Bocka av virade trådar i schemat
Kopplingsschema Kopplingsschema Från kopplingsschema till bygge Ett eller flera virkort...
Kopplingsschema Kopplingsschema Från kopplingsschema till bygge Parallella ledare...
Kopplingsschema Kopplingsschema Från kopplingsschema till bygge Anslut reset! Utan reset : svår felsökning Utan reset : felaktig programmering
Kopplingsschema Kopplingsschema Från kopplingsschema till bygge Anslut reset! Utan reset : svår felsökning Utan reset : felaktig programmering
Kopplingsschema Kopplingsschema Från kopplingsschema till bygge Anslut reset! Utan reset : svår felsökning Utan reset : felaktig programmering
Kopplingsschema Kopplingsschema Från kopplingsschema till bygge JTAG används för programmering och debugging JTAG-kedja...... eller inte
Innehåll Hårdvarunära design Avbrottsrutiner och huvudloopar Kopplingsschema Designspec
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
If you like living on the edge... Börja inte i tid Undvik ordentliga virningar Använd någon annans programkod Låt bli att strukturera programkoden Använd inte versionshantering Läs inte databladen Undvik att verifiera en komponents funktion Mät inte Undvik att samarbeta Bygg allt på en gång Man kan lära sig av misstagen - om man får dom i lagom doser
Designspec Innehåll Hårdvarunära design Avbrottsrutiner och huvudloopar Kopplingsschema Designspec
Designspec Designspec Checklista för designspec => Exempel på designspecar => +Fokus på hårdvaran +Pseudokod som bilaga +Upprepa *INTE* datablad Inlämningstid 5/11 kl 16:00 senast, ska en första version av designspecen vara inlämnad till handledaren. 3 arbetsdagar efter inlämnad version ska handledaren ge återmatning. Godkänd designspec ger tillgång till Muxen
Designspec Designspec Checklista för designspec => Exempel på designspecar => +Fokus på hårdvaran +Pseudokod som bilaga +Upprepa *INTE* datablad Inlämningstid 5/11 kl 16:00 senast, ska en första version av designspecen vara inlämnad till handledaren. 3 arbetsdagar efter inlämnad version ska handledaren ge återmatning. Godkänd designspec ger tillgång till Muxen
Designspec Designspec Checklista för designspec => Exempel på designspecar => +Fokus på hårdvaran +Pseudokod som bilaga +Upprepa *INTE* datablad Inlämningstid 5/11 kl 16:00 senast, ska en första version av designspecen vara inlämnad till handledaren. 3 arbetsdagar efter inlämnad version ska handledaren ge återmatning. Godkänd designspec ger tillgång till Muxen
Designspec Designspec Checklista för designspec => Exempel på designspecar => +Fokus på hårdvaran +Pseudokod som bilaga +Upprepa *INTE* datablad Inlämningstid 5/11 kl 16:00 senast, ska en första version av designspecen vara inlämnad till handledaren. 3 arbetsdagar efter inlämnad version ska handledaren ge återmatning. Godkänd designspec ger tillgång till Muxen