Benötigen Sie Hilfe bei der Auswahl der Flash-Größe in einem Mikrocontroller

Ich muss mich für die Auswahl von Flash-Größe und RAM für ein Projekt entscheiden. Der Mikrocontroller, den ich bevorzuge, ist die TI MSP430-Serie. Aufgrund seines geringen Stromverbrauchs und der günstigen Serienkosten. Ich bin jedoch ein absoluter Neuling in der Entscheidung über die Erfassung von Anforderungen. Der größte Teil meiner Programmiererfahrung liegt auf Desktop-basierten Systemen, bei denen Programmgröße, RAM und Prozessorgeschwindigkeit im Allgemeinen keine große Rolle bei allgemeinen algorithmischen Aufgaben spielen.

Ich habe folgende Fragen:

  1. Gibt es Richtlinien oder Standardpraktiken zur Entscheidung über die RAM- und Flash-Größe für einen Mikrocontroller?
  2. Wie viele Codezeilen (C) entsprechen welcher Flash-Größe auf der MCU?
  3. Ist Assemblersprache der einzige Ausweg, wenn die Flash-Größe minimal gehalten werden muss?

In Bezug auf die allgemeine Auswahl eines Mikrocontrollers für ein Projekt, wie gehen die Fachleute auf diesem Gebiet vor, um den am besten geeigneten Mikrocontroller für die Aufgabe zu bestimmen? Welche Ressourcen suchen sie? Welchen Richtlinien folgen sie?

Antworten (6)

Die Antworten auf alle Ihre Fragen hängen davon ab, was Sie tun möchten.

Wie Sie sagten, Sie sind ein Neuling, also schlage ich vor, dass Sie den größten Mikrocontroller verwenden und einfach versuchen, das Projekt durchzuführen. Danach können Sie visualisieren, wie viel Code Sie verwenden, und ihn dann entsprechend dem verwendeten Code skalieren.

Einverstanden. Beginnen Sie mit etwas Großem und reduzieren Sie sich dann gegebenenfalls auf das kleinste Teil, das Ihren endgültigen Anforderungen entspricht.
"Größte" muss mit "In der Serie, auf die Sie abzielen" qualifiziert werden. Finden Sie die benötigten Peripheriegeräte und die benötigte Geschwindigkeitsklasse, wählen Sie eine Architektur/Familie und entwickeln Sie dann mit dem größten Prozessor dieser Familie. Beginnen Sie nicht mit etwas mit 512 KB Flash und 64 KB RAM, da dies der größte Mikrocontroller ist, den Sie finden können. Grenzen Sie es auf Cortex-M3 vs. AVR vs. PIC18 vs. MSP430 (zum Beispiel) ein, bevor Sie sich Gedanken über die Größe machen. Ich vermute, dass Daniel damit gerechnet hat, dachte aber nur, dass es irgendwo gesagt werden muss.

Was msp430 betrifft, so ist es eine gute Architektur, ziemlich gute Tools da draußen, mspgcc und mspgcc4 und llvm für diese Angelegenheit. binutils ohne patchen. Sie können ein Launchpad für unter 5 US-Dollar zu diesem Preis bekommen, kaufen Sie ein paar (eventuell werden Sie etwas zumauern oder es kurzschließen und einschmelzen, haben Sie ein Ersatzteil, besonders zu diesem Preis) ...

Laden Sie die Tools herunter, sie sind alle kostenlos, schreiben Sie ein paar Zeilen Code, lernen Sie, wie Sie sie verknüpfen, sehen Sie, wie groß die Binärdatei wird, bekommen Sie ein Gefühl für eingebettete Codezeilen in Rom-Größe usw.

Wie machen das Profis. So ziemlich jede Art, die Sie sich vorstellen können:

Bei einigen Unternehmen kommt das Mandat von ganz oben, und Sie können nichts dagegen tun, außer zu kündigen. Und Sie werden vielleicht nie erfahren, warum diese Plattform gewählt wurde.

Mal gibt der Auftragnehmer/Lieblingskunde die Plattform vor, mal kann man aufklären/verhandeln, mal nicht.

Manche Leute haben einfach einen Favoriten, Angst vor dem Unbekannten, was auch immer. Derselbe Grund, warum manche Leute nur eine Automarke kaufen, weil mein Vater es tat und sein Vater davor, und das könnte der ganze Grund sein.

Einige Leute konzentrieren sich auf die Werkzeuge. Auch hier haben Sie markentreue Leute, die sich auf ihre bevorzugte Compiler-Firma und die von ihnen unterstützten Ziele oder das bevorzugte Open-Source-Tool und das, was es unterstützt, beschränken. Bevorzugtes eingebettetes Betriebssystem und Beschränkung auf die unterstützten Ziele.

In einigen Fällen geht es um Tools, aber auf andere Weise haben Sie im Laufe der Zeit möglicherweise viel Geld in jährliche Supportverträge mit einem Anbieter (z. B. Arm oder Xilinx oder Motorola) investiert, und es kann sein, dass Ihnen der Support gefallen hat und nicht ändern wollen oder der Teufel, den du kennst, ist besser als der Teufel, den du nicht tust. Oder es könnte sein, dass, weil die anderen 5 aktiven Projekte im Unternehmen dieses Ding verwenden und wir bereits einen Supportvertrag haben und Jahr für Jahr weiter dafür bezahlen, Sie sich für eine dieser Anbieterlösungen entscheiden müssen.

Manchmal geht es darum, die Millionen zu sparen. Dieses Teil ist 1,5 % billiger als dieses Teil, lassen Sie es mit diesem Teil funktionieren, kümmern Sie sich nicht um die NRE, denken Sie an die Herstellungseinsparungen beim Volumen.

Manchmal geht es um das Negative. Ein Anbieter hat Ihr Unternehmen möglicherweise auf die eine oder andere Weise verarscht. Die Nichteinhaltung der angekündigten Teilelieferung führt zu Verzögerungen oder Stornierung Ihrer Produkte. Bait-and-Switch-Betrug (die Gebühr von 50.000 US-Dollar für die Software beinhaltete nicht die Gebühr von 1200 US-Dollar für den Dongle, der zum Entsperren der Lizenz erforderlich ist, das ist ein zusätzlicher Kostenpunkt. Oh, und das war pro Benutzer für die Floating-Lizenz). Sobald Sie die NDA unterschrieben haben, um das Referenzhandbuch oder den Referenzdesign-Leitfaden für Programmierer einzusehen, finden Sie heraus, wie schrecklich ihre Technik ist, und Sie können sich dafür entscheiden, alle ihre Produkte lebenslang auf die schwarze Liste zu setzen. Vorgeschichte mit schrecklichem technischen Support. Eine Reihe von Gründen kann dazu führen, dass Sie ihre Verkäufer niemals vor die Haustür lassen oder Sie davon abhalten, jemals wieder auf ihre Website zu schauen.

Manchmal hat es mit Leistung, Schnittstellen usw. zu tun. Beispiel: Sie haben eine Schnittstelle, die verdrahtet ist und einen Pull-Up benötigt. Die Mikrocontroller-Marke XYZ für 3 US-Dollar pro Teil verfügt über eine Reihe von E / A-Pins, die verwendet werden können Da keine andere externe Hardware erforderlich ist, hat die Marke ABC ein 3-Dollar-Teil, das einen externen Transistor und einen Widerstand erfordert, damit es mindestens funktioniert. Ihr Beispiel des msp430, sagen wir, es geht um den Stromverbrauch, Teil A erfordert möglicherweise nur die Verwendung einer AAA-Batterie und läuft monatelang, Teil B benötigt möglicherweise zwei AAA-Batterien und läuft wochenlang.

Der seltenste Fall von allen ist, tatsächlich das Engineering durchzuführen, alle Anbieter zu befragen, den Stromverbrauch zu berechnen, den Preis pro Einheit Ihres Produkts zu berechnen, die Größe des Roms zu ermitteln und mit welcher Frequenz der Chip betrieben werden soll. Klebelogik, weiter und weiter. Normalerweise nimmt jemand (Chef/Kunde/Senior Engineer) seine jahrelange Erfahrung und schießt aus der Hüfte (oft mit einem oder mehreren der oben genannten), um den Weg zu wählen (oft ein guter Weg, der jede Menge Zeit im Zeitplan und Geld spart) und der Engineering wird einmalig durchgeführt, um die gewählte Plattform feinabzustimmen.

Meine persönliche Empfehlung ist, flexibel zu sein. Die meisten Mikrocontroller-Marken/-Familien sind in irgendeiner Form oder Mode auf einem Evaluierungsboard für unter 50 US-Dollar erhältlich. Sparkfun, Olimex oder direkt vom Anbieter (ti für msp430 oder stellaris usw.). Probieren Sie eines oder mehrere von jedem aus, bekommen Sie ein Gefühl dafür, was gemeinsam und was anders ist, Werkzeuge, Lader, wie schwer es zu entmauern ist usw. Sie bekommen mindestens zwei Dinge davon, eines ist, dass Sie einen Weg einschlagen müssen Von oben oder vom Kunden aus können Sie sofort loslegen. Zweitens sind Sie, wenn Sie an der Reihe sind, die Plattform auszuwählen, besser darüber informiert, was da draußen ist und was nicht, und können je nach Problem die richtige (geladene) Plattform auswählen gelöst werden.

Selbst wenn Sie nicht losziehen und diese Art von Geld für die Hardware ausgeben können, haben die meisten Tools, die Sie herunterladen können (kostenlos), in Fällen wie Mikrochip können Sie jetzt den C-Compiler (früher Hi-Tech) bekommen, aber abonnieren müssen (E-Mail-Adresse angeben). gcc like it or hate it wird in Ihrer Zukunft sein, Desktop oder eingebettet, machen Sie sich die Hände schmutzig und lernen Sie, es als Cross-Compiler zu verwenden. Probieren Sie auch llvm aus, es wird noch eine Weile existieren und gcc ernsthafte Konkurrenz machen. Wie auch immer, schreiben oder finden Sie einige Emulatoren, Mame hat viele, gdb hat einige usw. Ich habe einen namens Thumbulator bei Github geschrieben, nur ARM-Daumenmodus, ähnlich einem Cortex-m3, außer dass ich Thumb2 nicht unterstütze (kann noch einiges lernen und lassen Sie Programme auf beiden laufen, bevor Sie auf reine Hardware umstellen). Ich habe einen msp430-Emulator entwickelt, bin damit aber irgendwie ins Stocken geraten. Der Unterrichtsumfang ist so klein, dass der Großteil der Arbeit ein Abend- oder vielleicht ein Samstagsprojekt ist. Gleiches gilt für den PIC, ein langer Nachmittag und Sie haben einen Befehlssatzsimulator, mit dem Sie eingebettet üben können. Wenn nichts anderes, können Sie einfach die Programme kompilieren und verlinken, um ein Gefühl dafür zu bekommen, wie das geht und wie groß die Programme am Ende werden, wie man die Programme abstimmt, um strafferen Code zu erzeugen usw.

Was C vs. Assembler betrifft, so sind einige Befehlssätze C-freundlich und andere nicht. Einige Compiler sind mittelmäßig und einige sind wirklich schlecht und nur wenige sind wirklich gut (und kosten normalerweise ein paar tausend Dollar einmal oder pro Jahr für die Verwendung). Wie bei der Leistung überall, wenn Sie es wirklich pushen wollen, kann eine Mischung aus Hochsprache (sagen wir einfach C) und Assembler erforderlich sein. Die Fähigkeit besteht also nicht darin, die gesamte Anwendung in Assembler zu schreiben, die Fähigkeit besteht darin, zu bestimmen, welcher Code dazu führt, dass Sie das Timing / die Leistung nicht erreichen, und dann zu wissen, wie Sie dies entweder durch C, Compileroptionen, die Auswahl des richtigen Compilers oder das Schreiben von Assembler lösen können.

Ich empfehle, dass Sie Assembler für alle Plattformen kennen, die Sie verwenden möchten, wenn nichts anderes lesbares Wissen darüber als bei Embedded, empfehle ich Ihnen, häufig zu disassemblieren (während Sie herausfinden, wo Ihre Leistungsprobleme liegen). Bei vielen Plattformen ist ohnehin etwas Assembler für den Startcode erforderlich oder erwünscht.

Wenn Sie diese 10-20% des Preises pro Einheit sparen möchten und den billigeren/langsameren Mikrocontroller oder Oszillator oder das 32-KB-Flash-Teil anstelle des 64-KB-Flash-Teils kaufen möchten und die Entwicklungskosten mit dem Verkaufsvolumen decken können, und Vielleicht eine lange Liste anderer Dinge, die Sie sehr gut wählen können, um das Ganze in Assembler zu schreiben, schnell, stromsparend, kostengünstig, zufriedene Kunden.

Abhängig von Ihrem bisherigen Hintergrund sollten Sie sich vielleicht keine Gedanken darüber machen, in Assembler zu schreiben und vielleicht über die elektrotechnischen Aspekte von eingebetteten Mikrocontrollern, das Lesen von Schaltplänen, das Wissen, was Open Collector, Tri State, Push Pull, PWM, ADC, DAC und vieles mehr ist lange Liste anderer Begriffe und wie man sie verwendet. bit banging i2c, spi, mdio, dallas one wire, etc. Verwendung eines Oszilloskops als Software-Debugger. Auch wenn Oszilloskope heute Dinge für Sie hervorheben können (ein zusätzlicher Kostenpunkt), sollten Sie in der Lage sein, i2c und spi und einige andere Protokolle ohne die Highlights anzuschauen.

Ich empfehle auch, dass Sie für jede der Plattformen, mit denen Sie spielen, aus der Sandbox eines anderen herauskommen (z. B. die Arduino ide/Programmierumgebung). Schreiben Sie den Boot-Code, der den Prozessor vom Zurücksetzen in Ihr main()-Programm bringt, tun Sie so viel wie Sie können, um zu verstehen, wie man den Flash lädt/programmiert, bis zu dem Punkt, an dem Sie möglicherweise Ihren eigenen Loader schreiben müssen, auch wenn dieser von der Stange ist dort. Es dreht sich alles um persönliche Bildung, je mehr Sie wissen und aus Ihrer Gesäßtasche ziehen und nutzen können, desto mehr Kontrolle haben Sie über Ihre Karriere und desto mehr Nullen am Ende der Zahl auf Ihrem Gehaltsscheck.

Was auch immer Sie tun, versuchen Sie NICHT, x86 als Ihren ersten Assembler auf einem Desktop zu lernen, wählen Sie so ziemlich alles andere und kompilieren und simulieren Sie, ARM, THUMB, MSP430, PIC, AVR, sogar 6502, 8051. x86 ist eine schreckliche Anweisung eingestellt und als Ergebnis wurde es auf so viele Arten gemorpht und geformt, mikrocodiert, nicht mikrocodiert, Multi-Core, und so weiter. Halten Sie das x86 an Hochsprachen und sperrige Betriebssysteme. Verwenden Sie es für Ihren Texteditor und Compiler und zielen Sie auf etwas anderes ab.

Entschuldigung für die lange Antwort ... hoffe, es war hilfreich.

hmmm, wenn die Frage wäre, wie wählen Profis die Größe des Blitzes aus? schreiben Sie manchmal einen Code, der der Lösung ähnelt, kompilieren Sie und sehen Sie, wie groß sie ist. Wenn ein rtos verwendet werden soll, nehmen Sie einige Proben und nehmen Sie die Größe und fügen Sie einen Fudge-Faktor für den Code hinzu, den Sie hinzufügen werden. Vieles hat mit persönlicher Erfahrung beim Schätzen zu tun. Oft entscheiden Sie sich für eine Schätzung und verdoppeln sie dann für alle Fälle, und Ihr Chef kann Ihre Schätzung verdoppeln, damit er/sie nicht in Schwierigkeiten gerät und so weiter. Und das kann helfen, denn nach der Implementierung können Sie zum kleineren Teil wechseln und mit den Einsparungen ein Held sein.
Trotz seiner Länge finde ich diese Antwort sehr gut

Der beste Weg, um die Flash-/RAM-Anforderungen für Ihr Projekt zu bestimmen, besteht darin, einen Prototyp zu bauen und ihn zu messen.

Implementieren Sie die Kernalgorithmen auf einem PC und berechnen Sie die Größe des Objektcodes und die RAM-Nutzung. Dies gibt Ihnen eine ungefähre Figur, mit der Sie arbeiten können.

Vergessen Sie nicht, Ihr Budget aufzustocken, wenn Sie auf Betriebssystemfunktionen wie stdio oder Speicherverwaltung angewiesen sind.

Es gibt keine direkte Möglichkeit, Codezeilen mit der Größe des kompilierten Codes zu vergleichen. Aber Sie können Prozessorarchitekturen in Bezug auf die Codedichte vergleichen.

Ich denke, der beste Weg, um ein "Gefühl" für Ihre Anforderungen zu bekommen, in diesem Fall in Bezug auf den Speicher, besteht darin, einige Beispiele einer MCU zu erhalten, sie zu programmieren und zu sehen, wie viel Speicher verwendet wird. Tatsächlich hängt es vom verwendeten Compiler ab. Wenn Sie zum ersten Mal eine MCU programmieren, kümmern Sie sich nicht zu sehr um Spezifikationen. Wählen Sie einfach eine mit viel Speicher, vielen Peripheriegeräten usw. aus. Auf diese Weise können Sie viel von nur einer MCU lernen. Wenn Sie Ihr erstes Projekt mit dieser MCU erstellen, haben Sie eine bessere Vorstellung von Speicher, den Sie für weitere Projekte benötigen.

Die am besten geeignete MCU für eine Aufgabe? Wie viele ADC-Kanäle benötigen Sie? Was ist mit DAC? Was ist in Ihrer Anwendung wichtiger: Leistung oder geringer Stromverbrauch? Sind das Fragen, die Sie beantworten müssen, wenn Sie eine bestimmte MCU auswählen?

Wählen Sie einen Mikrocontroller mit den von Ihnen benötigten Peripheriegeräten. Es wird wahrscheinlich eine Familie von Mikros geben, die die gleiche/ähnliche Peripherie, aber unterschiedliche Mengen an RAM und Flash haben. Beginnen Sie mit dem Chip mit dem größten RAM/Flash. Sobald Sie einen funktionierenden Prototyp haben, können Sie auf ein billigeres Mikro umsteigen, wenn Ihr Programm passt.

Echte Profis wählen einen Mikrocontroller nicht isoliert aus, sie betreiben ein Projekt für maximalen Gewinn. Abhängig von den Projektkriterien, die dazu führen können, dass ein Mikrocontroller ausgewählt wird, der zu teuer erscheint, aber zufällig gut zu den verfügbaren Fachkenntnissen, Tools, Bibliotheken usw. passt. Treffen Sie keine isolierten Entscheidungen, sondern behalten Sie das große Ganze im Auge , insbesondere die Summe (Entwicklungskosten + Herstellungskosten)!

Die meisten Hersteller von Mikrocontrollern bieten eine Reihe von Chips an, wobei die Flash-Größe einer der Parameter ist, die sich zwischen den verschiedenen Chips unterscheiden. Eine „sichere“ Wahl besteht darin, zunächst den Chip mit der größten Flash-Größe auszuwählen, damit Sie ihn herunterskalieren können, wenn die Anwendung in einen kleineren Chip passt. Anwendungen neigen jedoch dazu, an alle verfügbaren Größen (und mehr) angepasst zu werden.

Die IME-Flash-Größe ist kein großer Kostenfaktor mehr, auch die Anzahl der Pins spielt eine geringere Rolle, die RAM-Größe scheint der größte Kostentreiber zu sein.