Angenommen, Sie beginnen ein eingebettetes Projekt mit einigen bekannten Funktionen. Wenn Sie einen Mikrocontroller auswählen, wie wählen Sie aus, wie viel RAM Sie benötigen?
Verwenden Sie ein Entwicklerboard und codieren Sie zuerst Ihr Projekt und sehen Sie dann, wie viel Speicher Sie verwendet haben, und wählen Sie dann einen geeigneten Mikrocontroller aus, der zu diesem Speicher passt?
Wählen Sie einfach einen kräftigen Mikrocontroller für einen Prototypen aus und skalieren Sie ihn dann herunter, nachdem Sie ein funktionierendes Produkt haben?
Wählen Sie einfach etwas aus, von dem Sie sicher sind, dass es ausreicht, und wenn Ihnen der Speicherplatz ausgeht, rüsten Sie einfach auf eine höhere Speicherdichte auf, andernfalls behalten Sie einfach den vorhandenen Mikrocontroller?
Was gilt als gute Praxis?
Persönlich tendiere ich für Hobbyprojekte dazu, den leistungsstärksten Mikrocontroller der Familie mit dem richtigen Platzbedarf zu verwenden. Dann entwickle ich die Leiterplatte, schreibe etwas Code und produziere einen Prototyp.
Das hat den Vorteil, dass ich die kleine Anzahl von Mikrocontrollern ziemlich gut kenne, sodass ich schnell Prototypen erstellen kann, ohne ein ganzes Datenblatt lesen zu müssen. Ich habe auch Breakout-Boards und Code-Vorlagen dafür.
Wenn es funktioniert und ich mehr als eine Handvoll mache, kaufe ich den billigsten Mikrocontroller, der die richtigen Peripheriegeräte und genug Speicher für alles hat, was ich zuvor codiert habe. Dies kann ärgerlich sein, wenn sich interne Register ändern (passiert auf dem PIC) oder wenn einer der Mikrocontroller über zusätzliche Peripheriegeräte verfügt, die deaktiviert werden müssen, damit der Code funktioniert.
Für Produktionszwecke würde dies jedoch dazu führen, dass Sie eine beträchtliche Menge von jeder Einheit einsparen können.
Natürlich kann es für einen einzelnen selbstgebauten Prototypen eine gute Empfehlung sein, mit dem leistungsstärksten aller kompatiblen Mikros zu beginnen und danach herunterzuskalieren.
Wenn Sie jedoch ein Angebot gewinnen möchten, müssen Sie Ihrem Kunden einen Preis nennen , bevor Sie das Geld haben, um etwas umzusetzen.
Daher empfiehlt es sich, eine Art Spezifikation aufzuschreiben, bevor Sie mit dem Programmieren beginnen. Sie wissen, was Sie tun möchten, und Sie sollten aufschreiben, wie Sie es tun werden.
Dieses „Wie“ beinhaltet auch das Nachdenken über ein Softwaredesign, die Beantwortung von Fragen wie:
Wenn Sie all diese Werte zusammenfassen, erhalten Sie eine grobe Schätzung. Wie weit Sie darauf vertrauen können, hängt davon ab, wie detailliert Ihre Analyse ist, und es hängt von Ihrer Erfahrung ab :-)
Eine Marge von mindestens 30..50% Ihrer Schätzung hinzuzufügen, ist sicherlich eine gute Idee.
Wenn Ihr Produkt fertig ist und Sie ca. 80..90% RAM in Verwendung haben, können Sie ziemlich sicher sein, dass Ihre Auswahl richtig war - zumindest was den Arbeitsspeicher betrifft.
Wenn es nur möglich wäre, Ihr eingebettetes System zuerst zu codieren und dann die Hardware zu bauen. Das würde das Leben aller erleichtern. Leider bedeutet das auch, dass Ihre Fristen aus dem Fenster sind. Typischerweise muss die Hardware entworfen werden, lange bevor die Software fertig ist, da Hardwareteile häufig lange Vorlaufzeiten haben.
Daher müssen Entwickler eingebetteter SW normalerweise den Speicher- und CPU-Bedarf ihres Programms abschätzen. Ihr erster Schritt sollte sein, die Hardware-Jungs davon zu überzeugen, Ihnen den leistungsstärksten Mikrocontroller/CPU mit dem größtmöglichen RAM zu geben. Das funktioniert selten, weil sie ihre eigenen Anforderungsziele haben, aber hin und wieder hat man Glück.
Wenn das nicht funktioniert, ist das nächste, was Sie tun würden, ein High-Level-Softwaredesign und zerlegen Sie die Module in Funktionalität. Sie würden dann Codezeilen für jede Funktion für jedes Modul im System schätzen. Sie können dann eine Formel verwenden, um Codezeilen in eine ungefähre Schätzung des Codespeichers umzuwandeln. Sie würden auch alle ungewöhnlichen Speicheranforderungen (wie große Arrays) untersuchen und eine Schätzung hinzufügen, um dies zu berücksichtigen. Fügen Sie dann einen Prozentsatz zu dieser Summe hinzu, um alles abzudecken, was Sie verpasst haben. Verdoppeln Sie diese dann, um die typische Auslastungsanforderung von 50 % zu erfüllen.
Ja, es braucht Zeit. Ja, es ist notwendig, durch alle Hürden zu springen, weil das Ändern der Hardware nach dem Bau wirklich schwierig ist.
Im Allgemeinen stecken Hersteller von Mikrocontrollern eine Reihe von Speicher in ihre Geräte, die für typische Anwendungen geeignet sind. Wenn Sie also nur wenige I/O-Pins und einen SPI in einem Gerät mit geringem Platzbedarf benötigen, werden Sie wahrscheinlich nichts finden, das mit 500 kByte Flash und 64 kByte RAM geliefert wird. Bei größeren Geräten, die näher an SoC-Paketen liegen, ist selbst das kleinste mit ziemlicher Sicherheit groß genug, es sei denn, Sie planen ernsthafte Zahlenverarbeitung wie Bildverarbeitung.
In einem professionellen Umfeld ist der Schlüssel zur Auswahl des richtigen Mikrocontrollers die Verwendung historischer Daten. Sie haben eine Aufzeichnung der anderen Projekte, die Sie entwickelt haben, und wissen, welche Speicher- und anderen Siliziumressourcen erforderlich sind, um die einzelnen Funktionen zu implementieren. Sie wissen, was von dem Produkt erwartet wird, verfügen über eine gute Funktionsliste und können schnell und genau die Ressourcen berechnen, die der Mikrocontroller bereitstellen muss. Der Versuch, die Ressourcenanforderungen aus einer vorab erstellten Designspezifikation (die zu Beginn des Projekts entwickelt wird, wenn die wenigsten Informationen über das System verfügbar sind) zu erraten, ist in den besten Zeiten unzuverlässig und nur sehr erfahrene Ingenieure, die eine umfassende erstellt haben Datenbank mit historischen Daten im eigenen Kopf, werden mit dieser Methode jeden Erfolg haben.
Viele Unternehmen haben sowohl beim Software- als auch beim Elektronikdesign einen „agilen“ Ansatz gewählt, der den Aufbau einer „Bibliothek“ kleiner Feature-Boards (z. B. RS-485-Boards, ADC-Boards usw.) zusammen mit generischen Plattformboards umfasst, die die Mikrocontroller hosten , ähnlich wie bei der Verwendung eines Dev-Kits und Plug-Ins. Ein Produkt kann dann schnell (innerhalb von Stunden) als Prototyp erstellt werden, indem die für die Funktionen erforderlichen Boards ausgewählt und verbunden werden. Die Software ist ebenfalls aus Bibliotheksmodulen zusammengestellt und kann schnell portiert und getestet werden. Sobald die Größe des hardwarespezifischen Teils des Codes bekannt ist, reicht es normalerweise aus, den kleinsten Teil auszuwählen, der diesen enthält. Die Ausnahme ist die oben erwähnte, bei der die Funktionalität des Geräts Big Data oder sehr komplexe Algorithmen umfasst. Diese Methode liefert eine genaue,
(Ein weiterer Vorteil des agilen Ansatzes besteht darin, dass Software- und Elektronikentwicklung parallel durchgeführt werden können, wobei das Elektronikdesign eine Übung zur Integration des Satzes von Feature-Boards und zur gleichzeitigen Durchführung der relevanten EMV- und anderen schwierigen Aufgaben ist Anwendungssoftware wird auf den Prototypbaugruppen entwickelt. Einige Portierungen und Integrationen sind noch erforderlich, aber sie werden durchgeführt, wenn sowohl funktionierende Software als auch Elektronik verfügbar sind.)
Rahmen Catherine White
jwsc