- 1. Utvikling av produktkrav
- 2. Systemdesign og algoritmeutvikling
- 3. Koding for innebygd firmware
- Testing av innebygd fastvare
Programvareutvikling er generelt vanskelig, men for et innebygd system er det på et helt nytt vanskelighetsnivå. Firmwareutviklere må ha god kunnskap om maskinvareutvikling og forstå den interne funksjonen til en innebygd prosessor. For dagens artikkel vil jeg dele verktøy og tips som kan brukes til å oppnå et høyt effektivitetsnivå og eliminere noen av tingene som gjør firmwareutvikling kjedelig.
Innebygd programvareutvikling går gjennom den lignende utviklingsprosessen med "vanlig" programvareutvikling. Uavhengig av utviklings- / styringsmodellen som er vedtatt, innebærer Embedded Software Development generelt trinnene nedenfor:
- Utvikling av produktkrav
- Systemdesign og algoritmeutvikling
- Koding
- Testing
Vi vil undersøke noen av vanskelighetene som følger med disse trinnene, og noen av verktøyene som kan øke effektiviteten og produktiviteten.
1. Utvikling av produktkrav
Produktspesifikasjoner gjøres ofte med tanke på brettdesignerne. Den inneholder vanligvis lite informasjon som kan hjelpe fastvareutvikling, og den innebygde programvareutvikleren ender med et feil 250 sider (gjennomsnitt) dokument som ikke kan brukes til referanser, og hvis ikke nøye vurdert kan lett føre til oversikter i design som igjen vil, føre til at prosjektets tidsramme utvides hvis ikke total prosjektfeil. Dokumentene inneholder sjelden informasjon om registre eller deres bitfeltblant annet og dette koster firmwareutviklere flere arbeidstimer når de søker gjennom dokumentet for å identifisere ting som hvilket register som tilhører hvilken gruppe og hvilket bitfelt som tilhører hvilket register. Nedenfor er noen tips som kan vurderes for å sikre utvikling av mer nyttige prosjektspesifikasjonsdokumenter.
Bruk av registerbeskrivelser
Som diskutert ovenfor, må firmwareutviklere forstå detaljene i alle registre, minner osv. Av alle kontrollelementer (CPU, MCU, etc) i et prosjekt for å kunne effektivt kontrollere alle deler av systemet. For å få dette på plass, kan firmwareutviklere sikre at spesifikasjonsdokumentet inneholder en riktig beskrivelse av registre sammen med minnekart. Alle registre i kontrollelementet kan tildeles et særegent navn som gjør dem enkle å identifisere på tvers av dokumentet, og de kan alle bli varmekoblet slik at de fører til en liste i dokumentet som angir navn, plassering, blokk og adresse til hvert register.
Oppgavebeskrivelser
En annen måte som spesifikasjonsdokumenter kan gjøres nyttige for innebygde programvareutviklere, er å beskrive hva hver blokk skal gjøre og hvordan den skal gjøre det. Også på dette stadiet bør det være planer for feilhåndtering under hver blokk. I hovedsak ser dette ut som firmwareutvikleren sier; "Når jeg kommer hit, skal jeg gjøre dette, dette og dette for å sikre at dette, dette og det ikke skjer". Dette hjelper deg med å lede utviklerens arbeid og hjelper deg med å evaluere prosjektet allerede før design begynner å identifisere potensielle feil og feil, noe som sparer dyrebar tid og penger.
Det er andre faktorer, inkludert dokumentstruktur, bruk av lettleste skrifter (noe utviklerne kan jobbe med selv når de er trøtte), diagrammer og bilder der det er mulig, som alle kan øke effektiviteten til firmwareteamet etter dette stadiet.
2. Systemdesign og algoritmeutvikling
Dette stadiet innebærer utvikling av pseudokoder, flytskjemaer, tilstandsmaskiner og alt som er involvert i utformingen av firmwaren. For dette stadiet kan ganske mange verktøy brukes til å organisere tanker, utforske eldre / tidligere skrevet programvare rundt prosjektet og utvikle ditt eget flytskjema, tilstandsmaskin osv. Noen av disse verktøyene blir diskutert nedenfor.
PIM-er
På disse utviklingstrinn produktet, utviklere pleier å smøre mye som de samle ressurser på prosjektet fra web linker til formler etc. En av de beste måtene å holde styr på denne informasjonen, slik at de er nyttige senere er gjennom bruk av PIM (produktinformasjonsadministrasjon) verktøy. Det er ganske mange PIM der ute, men jeg vil nevne noen få med noen fremragende funksjoner.
1. Evernote
Evernote hjelper deg med å ta notater som er tilgjengelige på alle plattformer, slik at du kan sjekke notatet du lagde på PCen mens du var i bussen hjem. Notatene er godt organisert og er fullstendig søkbare, så du vil alltid finne det du trenger.
2. TrunkNote
Trunk note er et Wiki-lignende notatapplikasjon. Det bringer all organisasjonsmakt fra wikier til notater. Det er en mobiltelefonbasert applikasjon, men kan enkelt synkroniseres med en PC via WIFI.
Andre typer PIM-er som Tiddlywiki osv. Hver av dem har funksjoner som kan gjøre det mer attraktivt for spesifikke individer, og kan ta noen prøver før du endelig avgjør.
Forstå Legacy Code
En annen gruppe verktøy som er veldig nyttige under designfasen, er verktøy for å forstå eldre koder. I situasjoner der produktet som er designet er en forbedret versjon av et tidligere produkt, kan utvikleren synes det er nyttig å gjennomgå arbeidet som allerede er gjort for å få noen ideer og kanskje koder for dette nye prosjektet. Dette kan være ganske lang vei, spesielt hvis du ikke var en del av teamet som bygde den forrige programvaren. Det er ganske mange programvare som hjelper med å bygge trær, lage dokumentasjon og flytskjema fra allerede skrevet kode.
1. Gjør oksygen
Doxygen er et ganske kraftig verktøy som hjelper til med å lage dokumentasjon fra kildekoder. Den ble hovedsakelig designet for å fungere med C ++, men fungerer også med C, Python og noen andre språk. Den har muligheten til å trekke ut kodestrukturen til en hvilken som helst kode, og gir automatisk genererte avhengighetsgrafer og arvediagrammer for å visualisere koden.
2. Graphviz
I følge nettstedet deres hjelper graphviz med å presentere strukturell informasjon som diagrammer over abstrakte grafer og nettverk. Den kan brukes sammen med Doxygen for å bedre forstå grafikken som produseres av den.
3. Srecord
Srecord er et kraftig verktøy for å manipulere firmwarebilder og konvertere mellom forskjellige filformater. Den kan brukes til å beregne og gjøre CRCer og kontrollsummer på byteblokker, korrigere feilfiler opprettet på grunn av buggy-verktøykjeder, og filtrere eller flytte deler av filer blant annet. Mer informasjon om bruken finner du på SourceForge-siden.
Noen andre verktøy som faller inn under denne kategorien er blant annet CrystalRev og Hexplorer .
Utvikling av algoritmer
All forsknings- og notataggregater for utvikling av algoritmer som spinner ut i pseudokoder og flytskjemaer for prosjektet. Det finnes flere verktøy for å utvikle flytskjemaer, og selv om de fleste av dem ikke er eksklusive for firmwareutvikling, gir de nyttige og viktige funksjoner som bare gjør jobben og hjelper også med å opprettholde diagrammer gjennom hele produktutviklingssyklusen. Nedenfor er noen av de beste verktøyene der ute for flytskjema.
1. QFSM
QFSM er et grafisk verktøy for å designe og simulere maskiner med endelig tilstand. Evnen til å simulere designene gjør det mye bedre enn de fleste andre programvare i denne gruppen. Det er spesielt nyttig når du designer statlige maskiner for FPGA og lignende målvare.
2. Lucid Chart
Lucid-diagram er uten tvil den beste og mest fleksible programvaren for flytdiagrammer der ute. Det er nettbasert og har teamfunksjoner som lar deg jobbe mellom flere enheter og samarbeide i sanntid med lagkamerater.
3. Microsoft Visio
Visio er et av de beste grafiske verktøyene for tiden. Den har en rekke objekter fra forskjellige felt som gjør det enkelt å beskrive hva som helst. Imidlertid kommer den ikke med funksjoner som forbedrer samarbeidet mellom team, og kan bare brukes på en Windows-maskin som den er installert på.
4. Google Slides
En av de viktigste tingene i utviklingen av produkter i dagens verden er bruk av verktøy som gjør at teamene kan samarbeide effektivt hvor som helst de er, og det er en ting Google-lysbilder bringer ombord. Den kan brukes til å utvikle alle slags diagrammer fra flytskjemaer til programvare til organisasjonskart og tankekart. Den er skybasert og fungerer i nesten alle de populære nettleserne.
Flere andre verktøy finnes for å lage flytskjemaer og generell algoritmeutvikling, som vanlig, hver med sine egne fordeler og ulemper.
3. Koding for innebygd firmware
Alt som har blitt nevnt frem til dette punktet fører hit. Verden av SDKer og IDEer, valg av verktøy på dette stadiet avhenger av målenheten og funksjonene som skal bygges inn i enheten. Av denne grunn vil jeg ekskludere populære SDKer og IDEer som MPLAB, osv. Fra diskusjonen og bare holde fast til verktøy som er mer komplementære i naturen.
1. QT (GUI-utvikling)
Skjermer (interaktive eller ikke) er de mest populære mediumene for å gi tilbakemelding til brukerne i disse dager, og QTs SDK er en av de beste der ute og sannsynligvis ikke fremmed for noen innen den innebygde sirkelen. Det gir "dra og slipp" -funksjoner som gjør det enkelt å utvikle komplekse, GUI-baserte applikasjoner for innebygde enheter, uavhengig av målplattformen eller programmeringsspråket som brukes til den samlede prosjektutviklingen. Det eliminerer i utgangspunktet stresset forbundet med å bruke kode for å lage brukergrensesnitt.
2. (rask prototyping)
En av de største flaskehalsene i utviklingen av innebygd programvare er det faktum at maskinvaren vanligvis ikke er tilgjengelig for å teste ting mens du er på farten mens programvaren utvikles. Ofte når den er tilgjengelig, vil firmwareutviklerne ha fått seg til å vente hele tiden det tok før maskinvaren var klar til å gjøre lite eller ingenting. Dette øker ledetiden og skaper ikke rom for den slags synkronisering mellom maskinvareingeniørene og firmwareutviklerne som ville ha økt kvaliteten på produktet. For å løse dette problemet, skapte gutta på VaST en elektronisk systemnivå virtuell prototypeplattform som kunne brukes til å lage en virtuell maskinvareprototype som innebygd programvare kan kjøres for å bestemme systemytelsen før maskinvaren er klar.
3. Doxygen (dokumentasjon)
En av de viktigste delene av å skrive en hvilken som helst kode er dokumentasjon, og et av de mest populære verktøyene for det er Doxygen. Bortsett fra bruken av å forstå eldre programvare, har Doxygen muligheten til å automatisk trekke ut kommentarer fra en kode og lage dokumentasjon som inkluderer den. Doxygen-strukturer inkluderer filer grafisk og oppretter referanser for hver funksjon, variabel og makro som brukes i koden din. Flytskjemaer og dataflytdiagrammer kan også legges inn i dokumentasjonen ved å kombinere Doxygen med graphviz.
4. GIT (versjonskontrollsystemer)
Det er vanskelig å tro at noen utvikler programvare av noe slag uten noen form for versjonskontrollsystem i disse dager, men i tilfelle du gjør det, er det en ganske dårlig idé som kan føre til feil som vil koste deg tid og penger. Git skiller seg ut blant alle versjonskontrollverktøyene der ute av flere grunner. Det er åpen kildekode, rask, effektiv og for det meste lokal. Bortsett fra Git, er verktøy som subversion også verdt å nevne.
Testing av innebygd fastvare
Testing er en viktig del av utviklingsprosessen for hva som helst. Bedrifter taper tusenvis av dollar når enheter blir tilbakekalt på grunn av firmwarefeil, så det er en del av utviklingen som bør tas veldig seriøst. Det gjøres ofte, hånd i hånd, med koding og det første settet med verktøy for kodetesting, er sannsynligvis feilsøkingsprogrammene innen IDE eller SDK som brukes til prosjektet. Testing kommer i forskjellige former og utføres på forskjellige stadier, som sådan involverer det forskjellige slags verktøy. Testverktøy danner fastvareutvikling kutter designvalidering til statisk analyse og kjøretids testverktøy. Nedenfor er noen verktøy jeg synes er veldig nyttige.
1. Crystal REV
Crystal revs er et verktøy for å studere kode. Den kan brukes til å generere flytskjema fra C / C ++ -kode, noe som gjør det til et flott verktøy for å gjennomgå din egen kode og se om den foreløpige designen er det som ble implementert. Med crystal rev vil du raskt kunne se forskjellen mellom design og implementering. Dens evne til å generere flytskjemaer, data og samtalestrøm fra koder gjør det også til et verktøy som er nyttig for å analysere eldre kode.
2. PC- Lint
PC-lint er et av de eldste testverktøyene for firmware rundt. Den er i stand til å analysere programvare for å identifisere feil, sikkerhetsproblemer og sikre at koden ble skrevet i tråd med bransjestandarder. Lignende verktøy inkluderer polyspace, og LRDA, aubergine og Tessy blant andre.
3. Wireshark
Dette kommer godt med når du bygger nettverksenheter. Det er egentlig en pakkesniffer og kan hjelpe deg med å se dataene enheten din overfører. Dette kan hjelpe til med å sikre enheten.
4. Virtuell seriell portdriver
VSPD av eltima-programvaren er et verktøy jeg nylig også introduserte av en venn. Det er veldig nyttig når du arbeider med enhetsdrivere og annen utviklingsrelatert utvikling. Den virtuelle serielle com-porten gir deg muligheten til å teste comports oppførsel uten målenheten. Du kan opprette et ubegrenset antall porter som er i stand til å etterligne alle innstillingene til ekte porter. Programvaren kommer også med funksjoner som seriell port splitting, Com porter fusjon, bruk pakke com port tilkoblinger blant andre kule funksjoner.
Det er det for denne artikkelen, takk for at du tok deg tid til å lese. Selv om det er umulig å sannsynligvis liste opp alle verktøyene der ute, håper jeg du finner noen av disse verktøyene nyttige.