- 1. Utveckling av produktkrav
- 2. Systemdesign och algoritmutveckling
- 3. Kodning för inbyggd fast programvara
- Testar inbyggd fast programvara
Mjukvaruutveckling är generellt svår men för ett inbäddat system är det på en helt ny svårighetsgrad. Firmware-utvecklare måste ha god kunskap om hårdvaruutveckling och förstå den interna funktionen hos en inbäddad processor. För dagens artikel kommer jag att dela verktyg och tips som kan användas för att uppnå hög effektivitet och eliminera några av de saker som gör firmwareutveckling tråkig.
Inbyggd mjukvaruutveckling går igenom liknande utvecklingsprocess med "vanlig" programvaruutveckling. Oavsett vilken utvecklings- / hanteringsmodell som används antar Embedded Software Development i allmänhet följande steg:
- Utveckling av produktkrav
- Systemdesign och algoritmutveckling
- Kodning
- Testning
Vi kommer att undersöka några av svårigheterna med dessa steg och några av de verktyg som kan öka effektiviteten och produktiviteten.
1. Utveckling av produktkrav
Produktspecifikationer görs ofta med tanke på brädedesignerna. Det innehåller vanligtvis lite information som kan hjälpa firmwareutveckling, den inbäddade mjukvaruutvecklaren slutar med ett felaktigt 250-sidigt (genomsnitt) dokument som inte kan användas för referenser och om det inte noggrant övervägs kan det lätt leda till övervakningar i design som i sin tur, leda till att projektets tidsram förlängs om inte totalt projektfel. Dokumenten innehåller sällan information om register eller deras bitfältbland annat och detta kostar firmwareutvecklare flera man timmar när de söker igenom dokumentet för att identifiera saker som vilket register som tillhör vilken grupp och vilket bitfält som tillhör vilket register. Nedan följer några tips som kan övervägas för att säkerställa utvecklingen av mer användbara projektspecifikationsdokument.
Användning av registerbeskrivningar
Som diskuterats ovan måste firmwareutvecklare förstå komplexiteten i alla register, minnen etc. hos alla kontrollelement (CPU, MCU, etc) i ett projekt för att effektivt kunna kontrollera alla delar av systemet. För att få detta på plats kan firmwareutvecklare se till att specifikationsdokumentet innehåller en korrekt beskrivning av register tillsammans med minneskartor. Alla register i kontrollelementet kan tilldelas ett distinkt namn som gör dem lätta att identifiera över dokumentet och de kan alla vara länkade så att de leder till en lista i dokumentet som anger namn, plats, block och adress till varje register.
Uppgiftsbeskrivningar
Ett annat sätt genom vilket specifikationsdokument kan göras användbara för inbyggda mjukvaruutvecklare är genom att beskriva vad varje block ska göra och hur det ska göra det. Även i detta skede bör det finnas planer för felhantering under varje block. I grund och botten ser detta ut som firmwareutvecklaren säger; "När jag kommer hit, ska jag göra detta, detta och detta för att se till att detta, det här och det inte sker". Detta hjälper till att styra utvecklarens arbete och hjälper till att utvärdera projektet redan innan design börjar identifiera potentiella fel och fel, vilket sparar dyrbar tid och pengar.
Det finns andra faktorer, inklusive dokumentstruktur, användning av lättlästa teckensnitt (något som utvecklarna kan arbeta med även när de är trötta), diagram och bilder där det är möjligt, vilket alla kan öka firmware-teamets effektivitet efter detta skede.
2. Systemdesign och algoritmutveckling
Detta steg involverar utvecklingen av pseudokoder, flödesscheman, tillståndsmaskiner och allt som är involverat i utformningen av vad firmware. För detta steg kan ett stort antal verktyg användas för att organisera tankar, utforska äldre / tidigare skriven programvara runt projektet och utveckla ditt eget flödesschema, tillståndsmaskin etc. Några av dessa verktyg diskuteras nedan.
PIM
I detta skede av produktutvecklingen tenderar utvecklare att skribba mycket eftersom de samlar resurser på projektet från webblänkar till formler etc. Ett av de bästa sätten att hålla reda på denna information så att de är användbara senare är genom användning av PIM (produktinformation) verktyg. Det finns ett stort antal PIM där ute men jag kommer att nämna några med några enastående funktioner.
1. Evernote
Evernote hjälper dig att göra anteckningar som finns tillgängliga på alla plattformar så att du kan kontrollera anteckningen du gjorde på din dator när du var i bussen. Anteckningarna är välorganiserade och är helt sökbara så att du alltid hittar det du behöver.
2. TrunkNote
Trunk note är en Wiki-liknande anteckningsapplikation. Det tar hela organisationskraften hos wikier till anteckningar. Det är en mobiltelefonbaserad applikation men kan enkelt synkroniseras med en dator via WIFI.
Andra typer av PIM som Tiddlywiki etc. Var och en av dem har funktioner som kan göra det mer attraktivt för specifika individer och kan ta lite prov innan du äntligen bestämmer dig för en.
Förstå Legacy Code
En annan grupp verktyg som är mycket användbara under designfasen är verktyg för att förstå äldre koder. I situationer där produkten som designas är en förbättrad version av en tidigare produkt kan utvecklaren hitta det användbart att granska det arbete som redan har gjorts för att få några idéer och kanske bitar av kod för detta nya projekt. Det här kan vara en ganska lång väg, speciellt om du inte var en del av teamet som byggde den tidigare programvaran. Det finns ett stort antal program som hjälper till att bygga träd, skapa dokumentation och flödesscheman från redan skriven kod.
1. Doxygen
Doxygen är ett ganska kraftfullt verktyg som hjälper till att skapa dokumentation från källkoder. Det var huvudsakligen utformat för att fungera med C ++ men fungerar också med C, Python och några andra språk. Det har förmågan att extrahera kodstrukturen för vilken kod som helst och tillhandahålla automatiskt genererade beroendediagram och arvsdiagram för att visualisera koden.
2. Graphviz
Enligt deras webbplats hjälper graphviz att presentera strukturell information som diagram över abstrakta grafer och nätverk. Den kan användas tillsammans med Doxygen för att bättre förstå grafiken som produceras av den.
3. Srecord
Srecord är ett kraftfullt verktyg för att manipulera firmwarebilder och konvertera mellan olika filformat. Den kan användas för att beräkna och göra CRC och kontrollsummor på byteblock, korrigera felfiler som skapats på grund av buggy-verktygskedjor och bland annat filtrera eller flytta delar av filer. Mer information om dess användning finns på SourceForge-sidan.
Några andra verktyg som faller inom denna kategori är bland annat CrystalRev och Hexplorer .
Utveckla algoritmer
All forskning och anteckningsaggregat för utvecklingen av algoritmer som snurrar till pseudokoder och flödesscheman för projektet. Det finns flera verktyg för att utveckla flödesscheman och även om de flesta av dem inte är exklusiva för firmware-utveckling, ger de användbara och viktiga funktioner som helt enkelt får jobbet gjort och hjälper också till att underhålla sjökorten under produktutvecklingscykeln. Nedan följer några av de bästa verktygen för flödesschema.
1. QFSM
QFSM är ett grafiskt verktyg för att designa och simulera finite state-maskiner. Dess förmåga att simulera designen gör det bättre än de flesta andra program i denna grupp. Det är särskilt användbart när du utformar tillståndsmaskiner för FPGA och liknande hårdvara.
2. Lucid diagram
Lucid-diagram är utan tvekan den bästa och mest flexibla flödesschemaprogramvaran där ute. Det är webbaserat och har teamfunktioner som gör att du kan arbeta mellan flera enheter och samarbeta i realtid med lagkamrater.
3. Microsoft Visio
Visio är ett av de bästa grafiska verktygen för närvarande. Den har en rad objekt från olika fält som gör det enkelt att beskriva vad som helst. Det kommer dock inte med funktioner som förbättrar samarbetet mellan team och kan bara användas på en Windows-maskin där den är installerad.
4. Google-bilder
En av de viktigaste sakerna i utvecklingen av produkter i dagens värld är användningen av verktyg som gör att team kan samarbeta effektivt var de än befinner sig och det är en sak som Google-bilder tar ombord. Den kan användas för att utveckla alla typer av diagram från programflödesdiagram till organisationskartor och tankekartor. Det är molnbaserat och fungerar i nästan alla populära webbläsare.
Flera andra verktyg finns för att skapa flödesscheman och allmän algoritmutveckling, som vanligt, var och en med sina egna för- och nackdelar.
3. Kodning för inbyggd fast programvara
Allt som har nämnts fram till denna punkt leder hit. Världen av SDK: er och IDE: er, valet av verktyg i detta skede beror på målenheten och funktionerna som ska byggas in i enheten, av den anledningen kommer jag att utesluta populära SDK: er och IDE: er som MPLAB, etc från diskussionen och bara hålla fast till verktyg som är mer kompletterande till sin natur.
1. QT (GUI-utveckling)
Skärmar (interaktiva eller inte) är de mest populära medierna för att ge feedback till användare idag och QT: s SDK är en av de bästa där ute och förmodligen ingen främling för någon inom den inbäddade cirkeln. Det ger "dra och släpp" -funktioner som gör det enkelt att utveckla komplexa, GUI-baserade applikationer för inbäddade enheter, oavsett målplattformen eller det programmeringsspråk som används för den övergripande projektutvecklingen. Det eliminerar i grund och botten stressen med att använda kod för att skapa användargränssnitt.
2. (snabb prototyping)
En av de största flaskhalsarna i utvecklingen av inbäddad programvara är det faktum att hårdvaran vanligtvis inte är tillgänglig för att testa saker på språng medan programvaran utvecklas. Ofta när det är tillgängligt skulle firmwareutvecklarna ha fått vänta hela tiden det tog för hårdvaran att vara redo att göra lite eller ingenting. Detta ökar ledtiden och skapar inte utrymme för den typ av synkronisering mellan hårdvaruteknikerna och firmwareutvecklarna som skulle ha ökat produktens kvalitet. För att hjälpa till med att lösa detta problem skapade killarna på VaST en plattform för virtuell prototypplattform på elektronisk nivå som kan användas för att skapa en prototyp för virtuell hårdvara på vilken inbäddad programvara kan köras för att bestämma systemets prestanda innan hårdvaran är klar.
3. Doxygen (dokumentation)
En av de viktigaste delarna av att skriva en kod är dokumentation och ett av de mest populära verktygen för det är Doxygen. Förutom dess användning för att förstå äldre programvara har Doxygen förmågan att automatiskt extrahera kommentarer från en kod och skapa dokumentation som innehåller den. Doxygen-strukturer inkluderar filer grafiskt och skapar referenser för varje funktion, variabel och makro som används i din kod. Flödesscheman och dataflödesdiagram kan också bäddas in i dokumentationen genom att kombinera Doxygen med graphviz.
4. GIT (versionskontrollsystem)
Det är svårt att tro att någon utvecklar programvara av någon typ utan någon form av versionskontrollsystem idag, men bara om du gör det är det en ganska dålig idé som kan leda till misstag som kostar dig tid och pengar. Git sticker ut bland alla versionskontrollverktyg där ute av flera skäl. Det är öppen källkod, snabbt, effektivt och mestadels lokalt. Bortsett från Git är det också värt att nämna verktyg som subversion.
Testar inbyggd fast programvara
Testning är en viktig del av utvecklingsprocessen för vad som helst. Företag tappar tusentals dollar när enheter återkallas på grund av firmwarefel, så det är en del av utvecklingen som bör tas på allvar. Det görs ofta, hand i hand, med kodning och den första uppsättningen verktyg för kodtestning, är förmodligen felsökarna inom IDE eller SDK som används för projektet. Testning finns i olika former och utförs i olika stadier, som sådan involverar det olika slags verktyg. Testverktyg bildar utveckling av fast programvara genom designvalidering till statisk analys och testverktyg för runtime. Nedan följer några verktyg som jag tycker är mycket användbara.
1. Crystal REV
Crystal revs är ett verktyg för att studera kod. Det kan användas för att generera flödesschema från C / C ++ - kod vilket gör det till ett utmärkt verktyg för att granska din egen kod och se om den preliminära designen är det som implementerades. Med crystal rev kan du snabbt se skillnaden mellan design och implementering. Dess förmåga att generera flödesscheman, data och samtalsflöde från koder gör det också till ett verktyg som är användbart för att analysera äldre kod.
2. PC-Lint
PC-lint är ett av de äldsta testverktygen för firmware. Den kan analysera programvara för att identifiera fel, säkerhetsproblem och se till att koden skrevs i linje med branschstandarder. Liknande verktyg inkluderar polyspace och LRDA, aubergine och Tessy bland andra.
3. Wireshark
Detta är till nytta när du bygger nätverksenheter. Det är i huvudsak en paketförstörare och kan hjälpa till att se informationen som din enhet överför. Detta kan hjälpa till att säkra enheten.
4. Virtuell seriell portdrivrutin
VSPD by eltima-programvaran är ett verktyg som jag nyligen introducerade också av en vän. Det är väldigt användbart när du arbetar med enhetsdrivrutiner och annan utvecklingsrelaterad utveckling. Den virtuella seriella com-porten ger dig möjlighet att testa comports beteende utan målenheten. Du kan skapa ett obegränsat antal portar som kan emulera alla inställningar för riktiga portar. Programvaran levereras också med funktioner som delning av seriell port, sammanslagning av Com-portar, användning av kombinationsportanslutningar bland andra coola funktioner.
Det är det för den här artikeln, tack för att du tog dig tid att läsa. Även om det är omöjligt att antagligen lista alla verktyg där ute, hoppas jag att du tycker att några av dessa verktyg är användbara.