Wie bestimmen Sie, wie viel Flash / RAM Sie für einen Mikrocontroller benötigen?

24

Angenommen, Sie starten ein eingebettetes Projekt mit bekannten Funktionen. Wie wählen Sie bei der Auswahl eines Mikrocontrollers aus, wie viel RAM Sie benötigen?

Verwenden Sie eine Entwicklerkarte und codieren Sie Ihr Projekt zuerst, und prüfen Sie dann, wie viel Speicher Sie verwendet haben, und wählen Sie dann einen geeigneten Mikrocontroller aus, der zu diesem Speicher passt?

Suchen Sie sich einfach einen leistungsfähigen Mikrocontroller für einen Prototyp aus und verkleinern Sie ihn, nachdem Sie ein funktionsfähiges Produkt haben?

Wählen Sie einfach etwas aus, von dem Sie sicher sind, dass es ausreicht, und wenn Ihnen der Speicherplatz ausgeht, aktualisieren Sie einfach auf eine höhere Speicherdichte, ansonsten behalten Sie einfach den vorhandenen Mikrocontroller bei?

Was ist eine gute Praxis?

efox29
quelle
Meines Erachtens sollte es aus informationstheoretischer Sicht möglich sein, den RAM-Bedarf ausgehend von der Aufgabenspezifikation auf eine Größenordnung (Dimentional Reasoning Style) einzuschätzen. Hmmm ...
Lyndon White
Wenn Sie Bibliotheken verwenden, können Sie deren Speicherbedarf untersuchen. Mit Ihrem eigenen Code müssen Sie mit Erfahrung gehen. Vergleichen Sie das neue Projekt mit den alten und stellen Sie fest, ob es größer oder kleiner sein soll.
JWSC

Antworten:

20

Persönlich verwende ich für Hobbyprojekte eher den leistungsstärksten Mikrocontroller der Familie mit der richtigen Grundfläche. Anschließend entwickle ich die Leiterplatte, schreibe Code und erstelle einen Prototyp.

Dies hat den Vorteil, dass ich die geringe 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 für sie.

Wenn es funktioniert und ich mehr als eine Handvoll mache, kaufe ich den billigsten Mikrocontroller, der die richtigen Peripheriegeräte und genügend Speicher für alles hat, was ich zuvor codiert habe. Dies kann ärgerlich sein, wenn sich interne Register ändern (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 können Sie jedoch eine angemessene Menge von jeder Einheit abschneiden.

David
quelle
Für meine persönlichen Projekte tendiere ich dazu, einen ähnlichen Ansatz zu verfolgen. Die gleiche Methode schleicht sich auch bei mir ins Büro. Es ist nicht falsch, es funktioniert, aber es gibt bessere Möglichkeiten usw. Schätzen Sie die Eingabe!
efox29
In einer "echten" Umgebung wird es definitiv bessere Möglichkeiten geben. Warten wir auf andere Antworten!
David
Absurd. In einem großen Sandkasten entwickeln und später abschneiden. Die Zeit, die Sie sparen, deckt mehr als die zusätzlichen 4 US-Dollar ab, die Sie pro Mikrocontroller für die Entwicklung ausgeben. Dies funktioniert für mehr als nur Hobby-Sachen - und ist in der Tat noch wichtiger. Stellen Sie sich 12 Leute vor, die darauf warten, dass ein Wechsel zu einem größeren Controller statt einem stattfindet !!
Scott Seidman
13

Natürlich kann es für einen einzelnen selbstgebauten Prototyp eine gute Empfehlung sein, mit dem leistungsstärksten aller kompatiblen Mikros zu beginnen und anschließend zu verkleinern.

Wenn Sie jedoch ein Angebot gewinnen möchten, müssen Sie Ihrem Kunden einen Preis mitteilen, bevor Sie das Geld haben, um etwas umzusetzen.

Daher empfiehlt es sich, vor Beginn der Programmierung eine Spezifikation aufzuschreiben . Sie wissen, was Sie tun möchten, und Sie sollten aufschreiben, wie Sie es tun werden.

Dieses "Wie" beinhaltet auch das Nachdenken über ein Software-Design und die Beantwortung von Fragen wie:

  • Benötigen Sie ein Betriebssystem? Welcher? Welche Ressourcen braucht es?
  • Möchten Sie eine geschichtete Architektur haben? Dies erfordert Schnittstellen, die möglicherweise RAM verbrauchen
  • Welche Bibliotheken sind für Ihren Zweck bereits verfügbar und nützlich / notwendig und wie viel Speicher benötigen sie (eine gute Dokumentation der Bibliothek beantwortet dies auf der Grundlage von mindestens einem Referenzbuild)?
  • Welche Strukturen und Variablen müssen Sie für Ihre eigenen Treiber und Ihre Anwendung implementieren?

Wenn Sie all diese Werte zusammenfassen, erhalten Sie eine grobe Schätzung. Wie weit Sie vertrauen können, hängt davon ab, wie detailliert Ihre Analyse ist, und von Ihrer Erfahrung :-) Es
ist sicherlich eine gute Idee, eine Marge von mindestens 30,50% Ihrer Schätzung hinzuzufügen.

Wenn Ihr Produkt fertig ist und Sie ungefähr 80..90% RAM verwenden, können Sie sicher sein, dass Ihre Auswahl richtig war - zumindest in Bezug auf RAM.

mic
quelle
2
Betreff: "80..90% RAM in Benutzung". Standardmäßig wird sichergestellt, dass Sie sowohl in der CPU als auch im Arbeitsspeicher nur eine maximale Auslastung von 50% verwenden, um zukünftige Upgrades und Fehlerbehebungen durchführen zu können.
Dunk
1
@Dunk: Kommt auf das Geschäft an. In der Automobilindustrie werden 80% aller Ressourcen (CPU, RAM, Flash) bei SOP allgemein akzeptiert. Bei billiger Unterhaltungselektronik kann es beispielsweise noch mehr sein: Wie wahrscheinlich ist ein Upgrade in einem System mit einer Lebensdauer von nur 2-3 Jahren?
mic
@Dunk: Ich könnte mich irren, aber es hört sich so an, als ob Sie an Desktop-Software mit dynamischem Speicher und all den damit verbundenen Unsicherheiten gewöhnt sind. Die überwiegende Mehrheit der eingebetteten Anwendungen ordnet alles statisch zu. Garantiert keine Speicherlecks. Dann können Sie genau 100% verwenden und für immer in Ordnung sein, solange Sie es nicht ändern. Das funktioniert natürlich nur, wenn Sie einen separaten Stapel von Ihrem Arbeitsspeicher haben oder genau wissen, wie sich der Stapel zu jeder Zeit verhält. Es ist eine gute Idee, etwas Platz dafür zu lassen, aber 10-20% sind für das, was ich getan habe, leicht genug.
AaronD
Das größere Problem bei eingebetteter Software sind Schurkenzeiger, Pufferüberläufe, Division durch Null und ähnliches. Einige MCUs können Ausnahmen in der Hardware auslösen, ähnlich wie Interrupts, aber alles, was ich verwendet habe, wird fröhlich fortgesetzt, als ob jemals nichts passiert wäre. Es wird eine Art Ergebnis geben, aber es ist wahrscheinlich nicht das, was Sie erwartet haben, und deshalb müssen Sie das überprüfen. Einige Dinge, wie arithmetische Über- / Unterläufe, können leicht überprüft und sofort behoben werden. andere Dinge, wie Schurkenzeiger, können völlig unbemerkt bleiben, bis eine Funktion, die jahrelang funktioniert hat, entscheidet, in die Luft zu jagen.
AaronD
3
Ob Sie ein 80% -Ziel oder ein 50% -Ziel anstreben möchten, hängt von Ihrem Kunden ab. Mit einer festen Spezifikation und nur benötigten Bugfixes sind 80% in Ordnung. Unzuverlässige Spezifikationen, erwarteter Funktionsschub und ein Spielraum, der ausreicht, um zusätzliche Kosten für mehr Headroom zu verursachen. Einmal kauften wir 2x so viele Mikrocontroller, wie wir brauchten, und wählten diejenigen aus, die genug übertakten, um uns die Leistung zu bieten, die wir brauchten. Das war viel billiger als ein PCB-Redesign für einen leistungsstärkeren Chip.
Mark Booth
3

Wenn es nur möglich wäre, zuerst Ihr eingebettetes System zu codieren und dann die Hardware zu erstellen. Das würde jedem das Leben leichter machen. Das bedeutet leider auch, dass Ihre Fristen aus dem Fenster sind. In der Regel muss die Hardware lange vor Fertigstellung der Software entworfen werden, da Hardwareteile häufig lange Vorlaufzeiten haben.

Daher müssen Entwickler von eingebetteten SWs in der Regel den Speicher- und CPU-Bedarf ihres Programms schätzen. Der erste Schritt sollte darin bestehen, die Hardware-Mitarbeiter davon zu überzeugen, Ihnen den leistungsstärksten Mikrocontroller / Prozessor mit dem größtmöglichen Arbeitsspeicher zur Verfügung zu stellen. Das funktioniert selten, weil sie eigene Anforderungsziele haben, aber hin und wieder hat man Glück.

Wenn dies nicht funktioniert, müssen Sie als Nächstes ein Software-Design auf hohem Niveau erstellen und die Module nach Funktionen aufteilen. 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 Ballpark-Schätzung des Codespeichers zu konvertieren. Sie würden auch ungewöhnliche Speicheranforderungen (wie große Arrays) untersuchen und eine Schätzung hinzufügen, um dies zu berücksichtigen. Addieren Sie dann einen Prozentsatz zu dieser Summe, um alles zu decken, was Sie verpasst haben. Verdoppeln Sie dann den Wert, um die typische Auslastung von 50% zu erreichen.

Ja, das braucht Zeit. Ja, es ist notwendig, durch alle Rahmen zu springen, da das Ändern der Hardware nach dem Bau sehr schwierig ist.

Dunk
quelle
Wo finden wir die Formel zum Konvertieren von Codezeilen in den Codespeicher?
EasyOhm
Das hängt davon ab, welche Sprache und welchen Compiler Sie verwenden. Wenn Sie Assembler verwenden, entspricht eine Zeile ungefähr einem Wort des Speichers (unabhängig von der Wortgröße Ihres Chips). Wenn Sie C verwenden, kann es sich um 3-5 Wörter pro Zeile handeln, und wenn Sie C ++ oder etwas noch komplexeres verwenden, ist es möglicherweise noch viel komplexer. Am besten kompilieren Sie einige in dieser Sprache geschriebene Programme und vergleichen Sie die Codezeilen mit dem Codespeicher, um einen Durchschnittswert zu erhalten.
Dakkaron
2

Im Allgemeinen stellen Mikrocontroller-Anbieter eine Reihe von Speichern in ihren Geräten bereit, die für typische Anwendungen geeignet sind. Wenn Sie also nur ein paar I / O-Pins und eine SPI in einem kleinen Gerät benötigen, ist es unwahrscheinlich, dass Sie etwas finden, das mit 500 kByte Flash und 64 kByte RAM geliefert wird. Bei größeren Geräten, die sich näher an SoC-Paketen befinden, ist mit ziemlicher Sicherheit auch das kleinste ausreichend groß, es sei denn, Sie planen eine ernsthafte Zahlenverarbeitung wie die Bildverarbeitung.

In einem professionellen Umfeld besteht der Schlüssel zur Auswahl des richtigen Mikrocontrollers darin, historische Daten zu verwenden. Sie haben eine Aufzeichnung der anderen Projekte, die Sie entwickelt haben, und wissen, welcher Speicher und welche anderen Siliziumressourcen zur Implementierung der einzelnen Funktionen erforderlich sind. Sie wissen, was von dem Produkt erwartet wird, haben also eine gute Funktionsliste und können schnell und genau die Ressourcen berechnen, die der Mikrocontroller bereitstellen muss. Der Versuch, den Ressourcenbedarf anhand einer Entwurfsspezifikation zu erraten (die zu Beginn des Projekts entwickelt wurde, wenn die wenigsten Informationen über das System verfügbar sind), ist im besten Fall unzuverlässig und nur sehr erfahrene Ingenieure, die eine umfassende Spezifikation erstellt haben Datenbank von historischen Daten in ihren eigenen Köpfen, wird jede Art von Erfolg bei der Verwendung dieser Methode haben.

Viele Unternehmen haben einen „agilen“ Ansatz für Software und elektronisches Design gewählt, der den Aufbau einer „Bibliothek“ kleiner Funktionskarten (z. B. RS-485-Karten, ADC-Karten usw.) sowie generischer Plattformkarten umfasst, auf denen sich die Mikrocontroller befinden Ähnlich wie bei der Verwendung eines Entwicklungskits und von Plug-Ins. Ein Produkt kann dann schnell (innerhalb von Stunden) als Prototyp erstellt werden, indem die für die Funktionen erforderlichen Platinensätze ausgewählt und verbunden werden. Die Software setzt sich ebenfalls aus Bibliotheksmodulen zusammen und kann schnell portiert und getestet werden. Sobald die Größe des hardwarespezifischen Teils des Codes bekannt ist, ist es normalerweise ausreichend, den kleinsten Teil auszuwählen, der diesen enthält. Die Ausnahme ist die oben erwähnte, bei der die Funktionalität des Geräts große Datenmengen oder sehr komplexe Algorithmen umfasst. Diese Methode liefert eine genaue,

(Ein weiterer Vorteil des Agile - Ansatzes besteht darin, dass Software - und Elektronikentwicklung parallel durchgeführt werden können. Das Elektronikdesign ist eine Übung zur Integration der Funktionsplatinen und zur gleichzeitigen Durchführung der relevanten EMV - und anderer schwieriger Aufgaben Auf den Protoype-Baugruppen wird Anwendungssoftware entwickelt. Einige Portierungen und Integrationen sind noch erforderlich, dies geschieht jedoch, wenn funktionierende Software und Elektronik verfügbar sind.)

Schlechter Hundekuchen
quelle