- 1. Entwicklung der Produktanforderungen
- 2. Systemdesign und Algorithmusentwicklung
- 3. Codierung für eingebettete Firmware
- Testen der eingebetteten Firmware
Die Softwareentwicklung ist im Allgemeinen schwierig, für ein eingebettetes System jedoch auf einem völlig neuen Schwierigkeitsgrad. Firmware-Entwickler müssen über gute Kenntnisse der Hardware-Entwicklung verfügen und die internen Abläufe eines eingebetteten Prozessors verstehen. Für den heutigen Artikel werde ich Tools und Tipps veröffentlichen, mit denen ein hohes Maß an Effizienz erreicht und einige Dinge beseitigt werden können, die die Firmware-Entwicklung mühsam machen.
Die Entwicklung eingebetteter Software durchläuft einen ähnlichen Entwicklungsprozess wie die "normale" Softwareentwicklung. Unabhängig vom gewählten Entwicklungs- / Managementmodell umfasst die Entwicklung eingebetteter Software im Allgemeinen die folgenden Schritte:
- Entwicklung der Produktanforderungen
- Systemdesign und Algorithmusentwicklung
- Codierung
- Testen
Wir werden einige der Schwierigkeiten untersuchen, die mit diesen Phasen verbunden sind, und einige der Werkzeuge, die die Effizienz und Produktivität steigern könnten.
1. Entwicklung der Produktanforderungen
Produktspezifikationen werden häufig unter Berücksichtigung der Board-Designer erstellt. Es enthält normalerweise nur wenige Informationen, die die Firmware-Entwicklung unterstützen könnten. Daher hat der Entwickler eingebetteter Software ein fehlerhaftes (durchschnittliches) Dokument mit 250 Seiten, das nicht als Referenz verwendet werden kann und bei nicht sorgfältiger Prüfung leicht zu Versehen im Design führen kann, was wiederum dazu führen kann führen dazu, dass der Projektzeitraum verlängert wird, wenn nicht das gesamte Projekt fehlschlägt. Die Dokumente enthalten selten Informationen über Register oder deren BitfelderDies kostet Firmware-Entwickler unter anderem mehrere Mannstunden, wenn sie das Dokument durchsuchen, um beispielsweise zu ermitteln, welches Register zu welcher Gruppe gehört und welches Bitfeld zu welchem Register gehört. Im Folgenden finden Sie einige Tipps, die berücksichtigt werden könnten, um die Entwicklung nützlicherer Projektspezifikationsdokumente sicherzustellen.
Verwendung von Registerbeschreibungen
Wie oben erläutert, müssen Firmware-Entwickler die Feinheiten aller Register, Speicher usw. aller Steuerelemente (CPU, MCU usw.) in einem Projekt verstehen, um alle Teile des Systems effektiv steuern zu können. Um dies zu erreichen, können Firmware-Entwickler sicherstellen, dass das Spezifikationsdokument eine ordnungsgemäße Beschreibung der Register sowie Speicherzuordnungen enthält. Allen Registern im Steuerelement kann ein eindeutiger Name zugewiesen werden, der die Identifizierung im gesamten Dokument erleichtert, und sie können alle so verknüpft werden, dass sie zu einer Liste innerhalb des Dokuments führen, in der Name, Speicherort, Block und Adresse von angegeben sind jedes Register.
Aufgabenbeschreibungen
Eine andere Möglichkeit, Spezifikationsdokumente für Entwickler eingebetteter Software nützlich zu machen, besteht darin, zu beschreiben, was jeder Block tun soll und wie er es tun soll. Auch in dieser Phase sollte es Pläne für die Fehlerbehandlung unter jedem Block geben. Im Wesentlichen sieht dies so aus, wie der Firmware-Entwickler sagt; "Wenn ich hier bin, soll ich dies, dies und das tun und sicherstellen, dass dies, dies und das nicht geschieht." Dies hilft bei der Arbeit des Entwicklers und bei der Bewertung des Projekts, noch bevor das Design beginnt, potenzielle Fehler und Bugs zu identifizieren, wodurch wertvolle Zeit und Geld gespart werden.
Es gibt andere Faktoren wie die Dokumentstruktur, die Verwendung einfach zu lesender Schriftarten (mit denen die Entwickler auch bei Müdigkeit arbeiten können), Diagramme und Bilder, die nach dieser Phase die Effizienz des Firmware-Teams steigern können.
2. Systemdesign und Algorithmusentwicklung
Diese Phase beinhaltet die Entwicklung der Pseudocodes, Flussdiagramme, Zustandsautomaten und alles, was mit dem Design der Firmware zu tun hat. In dieser Phase können eine Reihe von Tools verwendet werden, um Gedanken zu organisieren, ältere / zuvor geschriebene Software rund um das Projekt zu untersuchen und ein eigenes Flussdiagramm, eine Zustandsmaschine usw. zu entwickeln. Einige dieser Tools werden im Folgenden erläutert.
PIMs
In dieser Phase der Produktentwicklung kritzeln Entwickler häufig, wenn sie Ressourcen für das Projekt sammeln, von Weblinks bis hin zu Formeln usw. Eine der besten Möglichkeiten, diese Informationen im Auge zu behalten, damit sie später nützlich sind, ist die Verwendung von PIM Tools (Produktinformationsmanagement). Es gibt eine ganze Reihe von PIMs, aber ich werde einige mit einigen herausragenden Funktionen erwähnen.
1. Evernote
Mit Evernote können Sie Notizen machen, die auf jeder Plattform verfügbar sind, sodass Sie die Notizen überprüfen können, die Sie im Bus nach Hause auf Ihrem PC gemacht haben. Die Notizen sind gut organisiert und vollständig durchsuchbar, sodass Sie immer das finden, was Sie brauchen.
2. TrunkNote
Trunk Note ist eine Wiki-ähnliche Notizanwendung. Es bringt die gesamte organisatorische Kraft von Wikis zum Notieren. Es handelt sich um eine auf Mobiltelefonen basierende Anwendung, die jedoch über WIFI problemlos mit einem PC synchronisiert werden kann.
Andere Arten von PIMs wie Tiddlywiki usw. Jedes von ihnen verfügt über Funktionen, die es für bestimmte Personen attraktiver machen und möglicherweise einige Stichproben enthalten, bevor Sie sich endgültig für eines entscheiden.
Legacy-Code verstehen
Eine weitere Gruppe von Tools, die während der Entwurfsphase sehr nützlich sind, sind Tools zum Verständnis von Legacy-Codes. In Situationen, in denen das zu entwickelnde Produkt eine verbesserte Version eines früheren Produkts ist, kann es für den Entwickler hilfreich sein, die bereits geleistete Arbeit zu überprüfen, um einige Ideen und möglicherweise Code für dieses neue Projekt zu erhalten. Dies könnte ein ziemlich langer Weg sein, insbesondere wenn Sie nicht Teil des Teams waren, das die vorherige Software erstellt hat. Es gibt eine ganze Reihe von Software, mit deren Hilfe Bäume erstellt, Dokumentationen und Flussdiagramme aus bereits geschriebenem Code erstellt werden können.
1. Sauerstoff
Doxygen ist ein sehr leistungsfähiges Tool, mit dem Sie Dokumentationen aus Quellcodes erstellen können. Es wurde hauptsächlich für C ++ entwickelt, funktioniert aber auch mit C, Python und einigen anderen Sprachen. Es kann die Codestruktur eines beliebigen Codes extrahieren und automatisch generierte Abhängigkeitsdiagramme und Vererbungsdiagramme bereitstellen, um die Visualisierung des Codes zu erleichtern.
2. Graphviz
Laut ihrer Website hilft graphviz dabei, Strukturinformationen als Diagramme abstrakter Graphen und Netzwerke darzustellen. Es kann zusammen mit Doxygen verwendet werden, um die von ihm erzeugten Grafiken besser zu verstehen.
3. Srecord
Srecord ist ein leistungsstarkes Tool zum Bearbeiten von Firmware-Images und zum Konvertieren zwischen verschiedenen Dateiformaten. Es kann unter anderem zum Berechnen und Ausführen von CRCs und Prüfsummen für Byteblöcke, zum Korrigieren von Fehlerdateien, die aufgrund fehlerhafter Toolchains erstellt wurden, und zum Filtern oder Verschieben von Dateibereichen verwendet werden. Weitere Informationen zu seiner Verwendung finden Sie auf der SourceForge-Seite.
Einige andere Tools, die unter diese Kategorie fallen, sind unter anderem CrystalRev und Hexplorer .
Algorithmen entwickeln
Alle Forschungs- und Notizenaggregate zur Entwicklung von Algorithmen, die sich in Pseudocodes und Flussdiagramme für das Projekt niederschlagen. Es gibt verschiedene Tools für die Entwicklung von Flussdiagrammen. Die meisten davon sind nicht ausschließlich für die Firmware-Entwicklung vorgesehen. Sie bieten jedoch nützliche und wichtige Funktionen, mit denen Sie Ihre Arbeit einfach erledigen und die Diagramme während des gesamten Produktentwicklungszyklus pflegen können. Im Folgenden finden Sie einige der besten Tools für Flussdiagramme.
1. QFSM
QFSM ist ein grafisches Werkzeug zum Entwerfen und Simulieren von Finite-State-Maschinen. Seine Fähigkeit, die Designs zu simulieren, macht es viel besser als die meisten anderen Softwareprodukte in dieser Gruppe. Dies ist besonders nützlich, wenn Sie Zustandsautomaten für FPGA und ähnliche Zielhardware entwerfen.
2. Klare Tabelle
Lucid Chart ist wohl die beste und flexibelste Flowcharting-Software auf dem Markt. Es ist webbasiert und verfügt über Teamfunktionen, mit denen Sie zwischen mehreren Geräten arbeiten und in Echtzeit mit Teammitgliedern zusammenarbeiten können.
3. Microsoft Visio
Visio ist derzeit eines der besten grafischen Tools. Es verfügt über eine Reihe von Objekten aus verschiedenen Bereichen, mit denen sich alles leicht beschreiben lässt. Es enthält jedoch keine Funktionen, die die Zusammenarbeit zwischen Teams verbessern, und kann nur auf einem Windows-Computer verwendet werden, auf dem es installiert ist.
4. Google Slides
Eines der wichtigsten Dinge bei der Entwicklung von Produkten in der heutigen Welt ist die Verwendung von Tools, mit denen Teams von jedem Ort aus effektiv zusammenarbeiten können. Dies ist eine Sache, die Google Slides an Bord bringt. Es kann verwendet werden, um alle Arten von Diagrammen zu entwickeln, von Software-Flussdiagrammen bis hin zu Organigrammen und Mind Maps. Es ist Cloud-basiert und funktioniert in fast allen gängigen Browsern.
Wie üblich gibt es mehrere andere Tools für die Erstellung von Flussdiagrammen und die Entwicklung allgemeiner Algorithmen, von denen jedes seine eigenen Vor- und Nachteile hat.
3. Codierung für eingebettete Firmware
Alles, was bis zu diesem Punkt erwähnt wurde, führt hierher. In der Welt der SDKs und IDEs hängt die Auswahl der Tools in dieser Phase vom Zielgerät und den Funktionen ab, die in das Gerät integriert werden sollen. Aus diesem Grund werde ich beliebte SDKs und IDEs wie MPLAB usw. von der Diskussion ausschließen und einfach bleiben zu Werkzeugen, die sich eher ergänzen.
1. QT (GUI-Entwicklung)
Displays (interaktiv oder nicht) sind heutzutage die beliebtesten Medien, um Benutzern Feedback zu geben, und das SDK von QT ist eines der besten auf dem Markt und wahrscheinlich kein Unbekannter innerhalb des eingebetteten Kreises. Es bietet "Drag & Drop" -Funktionen, die es einfach machen, komplexe, GUI-basierte Anwendungen für eingebettete Geräte zu entwickeln, unabhängig von der Zielplattform oder der Programmiersprache, die für die gesamte Projektentwicklung verwendet wird. Grundsätzlich entfällt die Belastung durch die Verwendung von Code zum Erstellen von Benutzeroberflächen.
2. (Fast Prototyping)
Einer der größten Engpässe bei der Entwicklung eingebetteter Software ist die Tatsache, dass die Hardware normalerweise nicht verfügbar ist, um Dinge unterwegs zu testen, während die Software entwickelt wird. Oft, wenn es verfügbar ist, mussten die Firmware-Entwickler die ganze Zeit warten, bis die Hardware bereit war, wenig oder gar nichts zu tun. Dies erhöht die Vorlaufzeit und schafft keinen Raum für die Art der Synchronisierung zwischen den Hardware-Ingenieuren und den Firmware-Entwicklern, die die Qualität des Produkts erhöht hätte. Um dieses Problem zu lösen, haben die Mitarbeiter von VaST eine virtuelle Prototyping-Plattform auf elektronischer Systemebene erstellt , mit der ein virtueller Hardware-Prototyp erstellt werden kann auf dem eingebettete Software ausgeführt werden kann, um die Systemleistung zu bestimmen, bevor die Hardware bereit ist.
3. Sauerstoff (Dokumentation)
Einer der wichtigsten Teile beim Schreiben von Code ist die Dokumentation, und eines der beliebtesten Tools dafür ist Doxygen. Neben der Verwendung zum Verständnis älterer Software kann Doxygen automatisch Kommentare aus einem Code extrahieren und eine Dokumentation erstellen, die diese enthält. Doxygen-Strukturen enthalten Dateien grafisch und erstellen Referenzen für jede Funktion, Variable und jedes Makro, die in Ihrem Code verwendet werden. Flussdiagramme und Datenflussdiagramme können auch in die Dokumentation eingebettet werden, indem Doxygen mit graphviz kombiniert wird.
4. GIT (Versionskontrollsysteme)
Es ist heutzutage schwer zu glauben, dass irgendjemand Software jeglicher Art ohne ein Versionskontrollsystem entwickelt, aber nur für den Fall, dass Sie dies tun, ist es eine ziemlich schlechte Idee, die zu Fehlern führen kann, die Sie Zeit und Geld kosten. Git sticht aus mehreren Gründen unter allen Tools zur Versionskontrolle heraus. Es ist Open Source, schnell, effizient und meistens lokal. Neben Git sind auch Tools wie Subversion erwähnenswert.
Testen der eingebetteten Firmware
Testen ist ein wichtiger Teil des Entwicklungsprozesses für alles. Unternehmen verlieren Tausende von Dollar, wenn Geräte aufgrund von Firmware-Fehlern zurückgerufen werden. Dies ist ein Teil der Entwicklung, der sehr ernst genommen werden sollte. Dies geschieht häufig Hand in Hand mit der Codierung und den ersten Tools zum Testen des Codes. Dies sind wahrscheinlich die Debugger innerhalb der IDE oder des SDK, die für das Projekt verwendet werden. Das Testen erfolgt in verschiedenen Formen und wird in verschiedenen Phasen durchgeführt. Daher werden verschiedene Arten von Werkzeugen verwendet. Testtools reichen von der Firmware-Entwicklung über die Designvalidierung bis hin zu statischen Analyse- und Laufzeit-Testtools. Im Folgenden sind einige Tools aufgeführt, die ich sehr nützlich finde.
1. Kristall REV
Crystal Revs ist ein Werkzeug zum Studieren von Code. Es kann verwendet werden, um ein Flussdiagramm aus C / C ++ - Code zu generieren. Dies macht es zu einem großartigen Werkzeug, um Ihren eigenen Code zu überprüfen und festzustellen, ob das vorläufige Design implementiert wurde. Mit Crystal Rev können Sie schnell den Unterschied zwischen Design und Implementierung erkennen. Die Fähigkeit, Flussdiagramme, Daten und Anrufverläufe aus Codes zu generieren, macht es auch zu einem Werkzeug, das zur Analyse von Legacy-Code nützlich ist.
2. PC-Lint
PC-Lint ist eines der ältesten Tools zum Testen von Firmware. Es ist in der Lage, Software zu analysieren, um Fehler und Sicherheitslücken zu identifizieren und sicherzustellen, dass der Code gemäß den Industriestandards geschrieben wurde. Ähnliche Tools sind unter anderem Polyspace und LRDA, Aubergine und Tessy.
3. Wireshark
Dies ist praktisch beim Erstellen von Netzwerkgeräten. Es handelt sich im Wesentlichen um einen Paket-Sniffer, mit dessen Hilfe die von Ihrem Gerät übertragenen Daten angezeigt werden können. Dies kann bei der Sicherung des Geräts hilfreich sein.
4. Virtual Serial Port-Treiber
VSPD von eltima Software ist ein Tool, das ich kürzlich auch von einem Freund vorgestellt habe. Es ist sehr praktisch, wenn Sie an Gerätetreibern und anderen com-bezogenen Entwicklungen arbeiten. Über den virtuellen seriellen COM-Port können Sie das Verhalten von COM-Ports ohne das Zielgerät testen. Sie können eine unbegrenzte Anzahl von Ports erstellen, die alle Einstellungen von realen COM-Ports emulieren können. Die Software bietet außerdem Funktionen wie die Aufteilung serieller Ports, die Zusammenführung von Com-Ports und die Verwendung von Bundle-Com-Port-Verbindungen sowie weitere coole Funktionen.
Das war's für diesen Artikel, danke, dass Sie sich die Zeit zum Lesen genommen haben. Obwohl es unmöglich ist, wahrscheinlich alle Tools aufzulisten, hoffe ich, dass Sie einige dieser Tools nützlich finden.