- 1. Ontwikkeling van productvereisten
- 2. Systeemontwerp en algoritme-ontwikkeling
- 3. Codering voor Embedded Firmware
- Embedded Firmware testen
Softwareontwikkeling is over het algemeen moeilijk, maar voor een embedded systeem heeft het een geheel nieuwe moeilijkheidsgraad. Firmware-ontwikkelaars moeten een goede kennis hebben van hardwareontwikkeling en de interne werking van een embedded processor begrijpen. Voor het artikel van vandaag zal ik tools en tips delen die kunnen worden gebruikt om een hoge mate van efficiëntie te bereiken en een aantal dingen te elimineren die de ontwikkeling van firmware vervelend maken.
Ontwikkeling van embedded software doorloopt hetzelfde ontwikkelingsproces als "gewone" softwareontwikkeling. Ongeacht het toegepaste ontwikkel- / beheermodel omvat Embedded Software Development over het algemeen de volgende stappen:
- Ontwikkeling van productvereisten
- Systeemontwerp en algoritmeontwikkeling
- Codering
- Testen
We zullen enkele van de problemen onderzoeken die bij deze fasen optreden en enkele van de tools die de efficiëntie en productiviteit kunnen verhogen.
1. Ontwikkeling van productvereisten
Productspecificaties worden vaak gedaan met de bordontwerpers in gedachten. Het bevat meestal weinig informatie die de ontwikkeling van de firmware zou kunnen ondersteunen, dus de ontwikkelaar van embedded software krijgt een (gemiddeld) document van 250 pagina's met gebreken dat niet kan worden gebruikt voor referenties en als het niet zorgvuldig wordt overwogen, kan dit gemakkelijk leiden tot vergissingen in het ontwerp, wat op zijn beurt, leiden tot een verlenging van de projecttijd, zo niet tot een algehele mislukking van het project. De documenten bevatten zelden informatie over registers of hun bitveldenonder andere en dit kost firmware-ontwikkelaars verschillende manuren terwijl ze door het document zoeken om zaken te identificeren zoals welk register bij welke groep hoort en welk bitveld bij welk register hoort. Hieronder staan enkele tips die kunnen worden overwogen om de ontwikkeling van bruikbare projectspecificatiedocumenten te garanderen.
Gebruik van registerbeschrijvingen
Zoals hierboven besproken, moeten firmware-ontwikkelaars de fijne kneepjes van alle registers, geheugens, enz. Van alle besturingselementen (CPU, MCU, enz.) In een project begrijpen om effectief alle delen van het systeem te kunnen besturen. Om dit op zijn plaats te krijgen, kunnen firmware-ontwikkelaars ervoor zorgen dat het specificatiedocument een juiste beschrijving van registers en geheugenkaarten bevat. Alle registers in het besturingselement zouden een onderscheidende naam kunnen krijgen waardoor ze gemakkelijk te identificeren zijn in het hele document en ze kunnen allemaal hot-linked zijn zodat ze leiden naar een lijst in het document met de naam, locatie, blok en adres van elk register.
Taakbeschrijvingen
Een andere manier waarop specificatiedocumenten nuttig kunnen worden gemaakt voor ontwikkelaars van embedded software, is door te beschrijven wat elk blok zou moeten doen en hoe het het zou moeten doen. Ook in dit stadium zouden er plannen moeten zijn voor het afhandelen van fouten onder elk blok. In wezen lijkt dit op de firmware-ontwikkelaar die zegt; "Als ik hier kom, moet ik dit, dit en dit doen, en ervoor zorgen dat dit, dit en dat niet gebeurt". Dit helpt het werk van de ontwikkelaar te begeleiden en helpt het project te evalueren, zelfs voordat het ontwerp begint om mogelijke fouten en bugs te identificeren, waardoor kostbare tijd en geld wordt bespaard.
Er zijn nog andere factoren, waaronder de documentstructuur, het gebruik van gemakkelijk te lezen lettertypen (iets waar de ontwikkelaars mee kunnen werken, zelfs als ze vermoeid zijn), grafieken en afbeeldingen waar mogelijk, die allemaal de efficiëntie van het firmwareteam na deze fase kunnen verhogen.
2. Systeemontwerp en algoritme-ontwikkeling
Deze fase omvat de ontwikkeling van de pseudocodes, stroomdiagrammen, toestandsmachines en alles wat betrokken is bij het ontwerp van de firmware. Voor deze fase kan een behoorlijk aantal tools worden gebruikt om gedachten te ordenen, oude / eerder geschreven software rond het project te verkennen en je eigen stroomschema, toestandsmachine enz. Te ontwikkelen. Sommige van deze tools worden hieronder besproken.
PIM's
In deze fase van de productontwikkeling hebben ontwikkelaars de neiging om veel te krabbelen terwijl ze bronnen over het project verzamelen, van weblinks tot formules enz. Een van de beste manieren om deze informatie bij te houden zodat ze later bruikbaar zijn, is door het gebruik van PIM (productinformatiebeheer) tools. Er zijn nogal wat PIM's op de markt, maar ik zal er een paar noemen met een aantal opvallende kenmerken.
1. Evernote
Evernote helpt je notities te maken die op elk platform beschikbaar zijn, zodat je de notitie die je hebt gemaakt op je pc kunt bekijken terwijl je in de bus naar huis bent. De notities zijn overzichtelijk en volledig doorzoekbaar, zodat u altijd vindt wat u zoekt.
2. TrunkNote
Trunk-notitie is een Wiki-achtige toepassing voor het maken van notities. Het brengt alle organisatorische kracht van wiki's bij het maken van notities. Het is een applicatie op basis van mobiele telefoons, maar kan eenvoudig via WIFI worden gesynchroniseerd met een pc.
Andere soorten PIM's zoals Tiddlywiki enz. Elk van hen wordt geleverd met functies die het aantrekkelijker kunnen maken voor specifieke individuen en het kan zijn dat er wat steekproeven nodig zijn voordat u er uiteindelijk een besluit over neemt.
Inzicht in oude code
Een andere groep tools die erg handig is tijdens de ontwerpfase, zijn tools om legacy codes te begrijpen. In situaties waarin het product dat wordt ontworpen een verbeterde versie is van een vorig product, kan de ontwikkelaar het nuttig vinden om het werk dat al is gedaan te bekijken om ideeën op te doen en misschien stukjes code voor dit nieuwe project. Dit kan een behoorlijk lange weg zijn, vooral als je geen deel uitmaakte van het team dat de vorige software heeft gebouwd. Er is nogal wat software die helpt bij het bouwen van bomen, het maken van documentatie en stroomdiagrammen van reeds geschreven code.
1. Doxygen
Doxygen is een vrij krachtige tool die helpt bij het maken van documentatie op basis van broncodes. Het is voornamelijk ontworpen om met C ++ te werken, maar werkt ook met C, Python en enkele andere talen. Het heeft de mogelijkheid om de codestructuur van elke code te extraheren, door automatisch gegenereerde afhankelijkheidsgrafieken en overervingsdiagrammen te bieden om de code te visualiseren.
2. Graphviz
Volgens hun website helpt graphviz structurele informatie te presenteren als diagrammen van abstracte grafieken en netwerken. Het kan naast Doxygen worden gebruikt om de graphics die erdoor worden geproduceerd beter te begrijpen.
3. Srecord
Srecord is een krachtig hulpmiddel voor het manipuleren van firmwarebeelden en het converteren tussen verschillende bestandsindelingen. Het kan worden gebruikt om CRC's en checksums op byteblokken te berekenen en uit te voeren, foutbestanden te corrigeren die zijn gemaakt als gevolg van buggy toolchains, en om secties van bestanden te filteren of te verplaatsen, onder andere. Meer informatie over het gebruik ervan is te vinden op de SourceForge-pagina.
Enkele andere tools die onder deze categorie vallen, zijn onder andere CrystalRev en Hexplorer .
Algoritmen ontwikkelen
Al het onderzoek en het maken van notities komt samen voor de ontwikkeling van algoritmen die uitmonden in pseudocodes en stroomdiagrammen voor het project. Er bestaan verschillende tools voor het ontwikkelen van stroomdiagrammen en hoewel de meeste niet exclusief zijn voor firmware-ontwikkeling, bieden ze nuttige en belangrijke functies die de klus gewoon klaren en ook helpen bij het bijhouden van de diagrammen gedurende de hele productontwikkelingscyclus. Hieronder staan enkele van de beste tools die er zijn voor stroomdiagrammen.
1. QFSM
QFSM is een grafische tool voor het ontwerpen en simuleren van eindige toestandsmachines. Het vermogen om de ontwerpen te simuleren, maakt het veel beter dan de meeste andere software in deze groep. Het is met name handig wanneer u staatsmachines ontwerpt voor FPGA en soortgelijke doelhardware.
2. Heldere grafiek
Lucid chart is misschien wel de beste en meest flexibele stroomdiagramsoftware die er is. Het is webgebaseerd en heeft teamfuncties waarmee u tussen meerdere apparaten kunt werken en in realtime kunt samenwerken met teamgenoten.
3. Microsoft Visio
Visio is momenteel een van de beste grafische tools. Het heeft een reeks objecten uit verschillende velden waardoor het gemakkelijk is om alles te beschrijven. Het bevat echter geen functies die de samenwerking tussen teams verbeteren en kan alleen worden gebruikt op een Windows-machine waarop het is geïnstalleerd.
4. Google-dia's
Een van de belangrijkste dingen bij de ontwikkeling van producten in de wereld van vandaag is het gebruik van tools waarmee teams effectief kunnen samenwerken, waar ze ook zijn, en dat is één ding dat Google Slides aan boord brengt. Het kan worden gebruikt om allerlei soorten grafieken te ontwikkelen, van softwarestroomschema's tot organigrammen en mindmaps. Het is cloudgebaseerd en werkt in bijna alle populaire browsers.
Er bestaan verschillende andere tools voor het maken van stroomdiagrammen en algemene algoritme-ontwikkeling, zoals gewoonlijk, elk met zijn eigen voor- en nadelen.
3. Codering voor Embedded Firmware
Alles wat tot nu toe is genoemd, leidt hierheen. De wereld van SDK's en IDE's, de keuze van tools in dit stadium hangt af van het doelapparaat en de functies die in het apparaat moeten worden ingebouwd, daarom zal ik populaire SDK's en IDE's zoals MPLAB, enz. Uitsluiten van de discussie en gewoon vasthouden aan tools die meer complementair van aard zijn.
1. QT (GUI-ontwikkeling)
Displays (interactief of niet) zijn tegenwoordig de meest populaire media om gebruikers feedback te geven en QT's SDK is een van de beste die er is en waarschijnlijk geen onbekende voor iemand binnen de embedded cirkel. Het biedt "slepen en neerzetten" -functies die het gemakkelijk maken om complexe, GUI-gebaseerde applicaties voor embedded apparaten te ontwikkelen, ongeacht het doelplatform of de programmeertaal die wordt gebruikt voor de algehele projectontwikkeling. Het elimineert in feite de stress die gepaard gaat met het gebruik van code om gebruikersinterfaces te maken.
2. (Snelle prototyping)
Een van de grootste bottlenecks bij de ontwikkeling van embedded software is het feit dat de hardware meestal niet beschikbaar is om onderweg dingen te testen terwijl de software wordt ontwikkeld. Wanneer het beschikbaar is, moeten de firmware-ontwikkelaars vaak de hele tijd wachten voordat de hardware klaar was om weinig of niets te doen. Dit verlengt de doorlooptijd en creëert geen ruimte voor het soort synchronisatie tussen de hardware-ingenieurs en de firmware-ontwikkelaars die de kwaliteit van het product zouden hebben verhoogd. Om dit probleem op te lossen, hebben de jongens van VaST een virtueel prototypingplatform op elektronisch systeemniveau gemaakt dat kan worden gebruikt om een virtueel hardware-prototype te maken waarop embedded software kan worden uitgevoerd om de systeemprestaties te bepalen voordat de hardware gereed is.
3. Doxygen (documentatie)
Een van de belangrijkste onderdelen van het schrijven van code is documentatie en een van de meest populaire tools daarvoor is Doxygen. Afgezien van het gebruik ervan om oudere software te begrijpen, heeft Doxygen de mogelijkheid om automatisch opmerkingen uit een code te extraheren en documentatie te maken die deze bevat. Doxygen-structuren bevatten bestanden grafisch en creëren verwijzingen voor elke functie, variabele en macro die in uw code wordt gebruikt. Stroomdiagrammen en gegevensstroomdiagrammen kunnen ook in de documentatie worden ingebed door Doxygen te combineren met graphviz.
4. GIT (versiebeheersystemen)
Het is moeilijk te geloven dat iemand tegenwoordig software van welk type dan ook ontwikkelt zonder een soort versiebeheersysteem, maar voor het geval je dat doet, is het een behoorlijk slecht idee dat kan leiden tot fouten die je tijd en geld kosten. Git onderscheidt zich van alle tools voor versiebeheer die er zijn om verschillende redenen. Het is open source, snel, efficiënt en vooral lokaal. Naast Git zijn ook tools zoals subversion het vermelden waard.
Embedded Firmware testen
Testen is voor alles een belangrijk onderdeel van het ontwikkelingsproces. Bedrijven verliezen duizenden dollars wanneer apparaten worden teruggeroepen vanwege firmwarefouten, dus het is een onderdeel van de ontwikkeling dat zeer serieus moet worden genomen. Het wordt vaak gedaan, hand in hand, met codering en de eerste set tools voor het testen van code, zijn waarschijnlijk de debuggers binnen de IDE of SDK die voor het project worden gebruikt. Testen komt in verschillende vormen voor en wordt in verschillende stadia uitgevoerd, en daarom zijn er verschillende soorten tools bij betrokken. Testtools voor firmware-ontwikkeling gaan van ontwerpvalidatie tot statische analyse en runtime-testtools. Hieronder staan enkele tools die ik erg handig vind.
1. Crystal REV
Crystal revs is een hulpmiddel om code te bestuderen. Het kan worden gebruikt om stroomdiagrammen te genereren op basis van C / C ++ - code, wat het een geweldig hulpmiddel maakt om uw eigen code te herzien en te zien of het voorlopige ontwerp is wat werd geïmplementeerd. Met crystal rev ziet u snel het verschil tussen het ontwerp en de implementatie. De mogelijkheid om stroomdiagrammen, gegevens en oproepstromen uit codes te genereren, maakt het ook tot een hulpmiddel dat handig is voor het analyseren van legacy-code.
2. PC-pluis
PC-lint is een van de oudste firmware-testtools die er zijn. Het is in staat software te analyseren om bugs en beveiligingsproblemen te identificeren en ervoor te zorgen dat de code is geschreven in overeenstemming met industriestandaarden. Vergelijkbare tools zijn onder andere polyspace en LRDA, Eggplant en Tessy.
3. Wireshark
Dit is handig bij het bouwen van netwerkapparaten. Het is in wezen een packet sniffer en kan helpen bij het bekijken van de gegevens die uw apparaat verzendt. Dit kan helpen bij het beveiligen van het apparaat.
4. Stuurprogramma voor virtuele seriële poort
VSPD van eltima software is een tool die ik onlangs ook heb geïntroduceerd door een vriend. Het is erg handig bij het werken aan apparaatstuurprogramma's en andere com port-gerelateerde ontwikkelingen. De virtuele seriële com-poort geeft u de mogelijkheid om het gedrag van com-poorten te testen zonder het doelapparaat. U zou een onbeperkt aantal poorten kunnen maken dat in staat is om alle instellingen van echte com-poorten te emuleren. De software wordt ook geleverd met functies zoals seriële poortsplitsing, com-poorten samenvoegen, bundel com-poortverbindingen gebruiken en andere coole functies.
Dat is het voor dit artikel, bedankt dat je de tijd hebt genomen om te lezen. Hoewel het waarschijnlijk onmogelijk is om alle tools op te sommen, hoop ik dat u enkele van deze tools nuttig vindt.