Ich muss mich für die Auswahl der Flash-Größe und des RAM für ein Projekt entscheiden. Der Mikrocontroller, den ich am liebsten benutze, ist die TI MSP430-Serie. Aufgrund seines geringen Stromverbrauchs und der geringen Kosten für Serienreihen. Ich bin jedoch ein absoluter Neuling bei der Entscheidung über das Sammeln von Anforderungen. Der größte Teil meiner Programmiererfahrung liegt auf Desktop-basierten Systemen, auf denen Programmgröße, RAM und Prozessorgeschwindigkeit für allgemeine algorithmische Aufgaben im Allgemeinen keine große Rolle spielen.
Ich habe folgende Fragen:
- Gibt es Richtlinien oder Standardverfahren zur Festlegung der RAM- und Flash-Größe für einen Mikrocontroller?
- Wie viele Codezeilen (C) werden in wie viel Flash-Größe auf der MCU übersetzt?
- Ist die Assemblersprache der einzige Ausweg, wenn die Flash-Größe auf einem Minimum gehalten werden muss?
Wie gehen die Fachleute in diesem Bereich bei der allgemeinen Auswahl eines Mikrocontrollers für ein Projekt vor, um den für die Aufgabe am besten geeigneten Mikrocontroller zu bestimmen? Welche Ressourcen suchen sie? Welche Richtlinien befolgen sie?
Was das msp430 betrifft, ist es eine gute Architektur, ziemlich gute Tools da draußen, mspgcc und mspgcc4 und llvm. binutils ohne zu patchen. Sie können ein Launchpad für unter 5 US-Dollar zu diesem Preis kaufen, kaufen Sie ein paar (irgendwann werden Sie etwas ziegeln oder es kurzschließen und schmelzen, haben ein Ersatzteil, besonders zu diesem Preis) ...
Laden Sie die Tools herunter, sie sind alle kostenlos, schreiben Sie ein paar Codezeilen, lernen Sie, wie man sie verknüpft, sehen Sie, wie groß die Binärdatei wird, bekommen Sie ein Gefühl für eingebettete Codezeilen in Romgröße usw.
Wie machen es Profis? Fast jede Art, die Sie sich vorstellen können:
Bei einigen Unternehmen kommt das Mandat von oben und es gibt nichts, was Sie dagegen tun können, außer zu kündigen. Und Sie werden vielleicht nie erfahren, warum diese Plattform gewählt wurde.
Manchmal diktiert der Auftragnehmer / Lieblingskunde die Plattform, manchmal können Sie schulen / verhandeln, manchmal nicht.
Einige Leute haben einfach einen Favoriten, Angst vor dem Unbekannten, was auch immer. Der gleiche Grund, warum manche Leute nur eine Automarke kaufen, weil mein Vater und sein Vater es vorher getan haben, und das könnte der ganze Grund sein.
Einige Leute konzentrieren sich auf die Werkzeuge. Auch hier gibt es markentreue Leute, die sich auf ihre Lieblings-Compiler-Firma und die von ihnen unterstützten Ziele oder das bevorzugte Open-Source-Tool und dessen Unterstützung beschränken. Bevorzugtes eingebettetes Betriebssystem und Beschränkung auf die unterstützten Ziele.
In einigen Fällen handelt es sich um Tools, aber auf andere Weise haben Sie im Laufe der Zeit möglicherweise viel Geld in jährliche Supportverträge mit einem Anbieter investiert (z. B. Arm oder Xilinx oder Motorola), und es könnte sein, dass Ihnen deren Support gefallen hat und will dich nicht ändern oder der Teufel, den du kennst, ist besser als der Teufel, den du nicht kennst. Oder es könnte sein, dass Sie sich für eine dieser Anbieterlösungen entscheiden müssen, weil die anderen 5 aktiven Projekte im Unternehmen dieses Ding verwenden und wir bereits einen Supportvertrag haben und weiterhin Jahr für Jahr dafür bezahlen werden.
Manchmal geht es darum, die Jahrtausende zu retten. Dieses Teil ist 1,5% billiger als dieses Teil. Lassen Sie es mit diesem Teil funktionieren. Kümmern Sie sich nicht um das NRE. Denken Sie über die Mengeneinsparungen bei der Herstellung nach.
Manchmal geht es um die Negative. Möglicherweise hat ein Anbieter Ihr Unternehmen auf die eine oder andere Weise verarscht. Die Nichteinhaltung der angegebenen Teileversorgung führt zu Verzögerungen oder zur Stornierung Ihrer Produkte. Köder- und Switch-Betrug (die Gebühr von 50.000 USD für die Software enthielt nicht die Gebühr von 1200 USD für den Dongle, der zum Entsperren der Lizenz erforderlich ist. Dies ist ein zusätzlicher Kostenfaktor. Oh, und das war pro Benutzer für die Floating-Lizenz). Sobald Sie die NDA unterschrieben haben, um das Referenzhandbuch oder den Referenzentwurf des Programmierers zu lesen, finden Sie heraus, wie schrecklich ihre Technik ist, und Sie können sich dafür entscheiden, alle ihre Produkte auf Lebenszeit auf die schwarze Liste zu setzen. Vergangenheit mit schrecklichem technischen Support. Eine beliebige Anzahl von Gründen kann dazu führen, dass Sie niemals die Verkäufer in 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 drahtgebunden ist und ein Pull-up benötigt. Die Mikrocontroller-Marke XYZ für 3 USD pro Teil verfügt über einen Satz von E / A-Pins, die verwendet werden können Da keine andere externe Hardware erforderlich ist, verfügt die Marke ABC über einen 3-Dollar-Teil, für den ein externer Transistor und ein Widerstand erforderlich sind, damit er mindestens funktioniert. In Ihrem Beispiel für den msp430 geht es um den Stromverbrauch. Teil A erfordert möglicherweise nur, dass der Benutzer eine AAA-Batterie verwendet und monatelang läuft. Teil B benötigt möglicherweise zwei AAA-Batterien und läuft wochenlang.
Der seltenste Fall von allen ist, das Engineering tatsächlich durchzuführen, alle Anbieter zu befragen, die Stromverbrauchsberechnung durchzuführen, den Preis pro Einheit Ihrer Produktberechnung, die Größe eines Roms, das wir benötigen, und die Frequenz, mit der der Chip betrieben werden soll. Klebelogik, weiter und weiter. Normalerweise nimmt jemand (Chef / Kunde / leitender Ingenieur) seine jahrelange Erfahrung und schießt aus der Hüfte (oft mit einem oder mehreren der oben genannten), um den Pfad (oft ein guter Pfad, der jede Menge Zeit in Zeitplan und Geld spart) und den zu wählen Das Engineering wird einmal durchgeführt, um die ausgewählte Plattform zu optimieren.
Meine persönliche Empfehlung ist, flexibel zu sein. Die meisten Mikrocontroller-Marken / -Familien in irgendeiner Form oder Art und Weise können für weniger als 50 US-Dollar auf einem Bewertungsbrett angeboten werden. 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 ist und was anders ist, Werkzeuge, Lader, wie schwer es ist, die Ziegel zu lösen usw. Sie erhalten mindestens zwei Dinge daraus: Zum einen, wenn Sie auf einen Pfad gezwungen werden Von oben oder vom Kunden aus können Sie sofort loslegen. Zweitens: Wenn Sie an der Reihe sind, die Plattform auszuwählen, sind Sie besser darüber informiert, was da draußen ist und was nicht, und können anhand des Problems die richtige Plattform (mit geladenen Wörtern) auswählen gelöst werden.
Selbst wenn Sie nicht oder nicht ausgehen 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) kaufen müssen sich anmelden (geben Sie Ihre E-Mail-Adresse an). gcc mag es oder hasse es wird in deiner Zukunft sein, Desktop oder Embedded, mach dir die Hände schmutzig und lerne es als Cross Compiler zu benutzen. Versuchen Sie es auch mit llvm, es wird eine Weile dauern und gcc ernsthafte Konkurrenz machen. Wie auch immer, schreibe oder finde einige Emulatoren, Mame hat viele, GDB hat einige usw. Ich habe einen geschrieben, der als Thumbulator bei Github bezeichnet wird, nur im ARM-Thumb-Modus, ähnlich einem Cortex-M3, außer dass ich Thumb2 nicht unterstütze (kann noch einiges lernen und Programme auf beiden ausführen lassen, bevor Sie nur auf Hardware umschalten). Ich habe einen msp430-Emulator entwickelt, bin aber irgendwie ins Stocken geraten. Der Befehlssatz ist so klein, dass der Großteil der Arbeit ein Abend- oder vielleicht ein Samstagsprojekt ist. Gleiches gilt für den PIC, einen langen Nachmittag, und Sie haben einen Befehlssatzsimulator, mit dem Sie Embedded üben können. Wenn nichts anderes, können Sie einfach die Programme kompilieren und verknüpfen, um ein Gefühl dafür zu bekommen, wie das geht und wie groß die Programme sind, wie man die Programme abstimmt, um engeren Code zu erzeugen usw.
Für C vs Assembler sind einige Befehlssätze C-freundlich und andere nicht. Einige Compiler sind mittelgroß und einige sind wirklich schlecht und nur wenige sind wirklich gut (und kosten normalerweise ein paar tausend Dollar einmal oder pro Jahr, um sie zu verwenden). Wie bei der Leistung überall dort, wo Sie sie wirklich vorantreiben möchten, ist möglicherweise eine Mischung aus Hochsprache (sagen wir einfach C) und Assembler erforderlich. Die Fertigkeit schreibt also nicht die gesamte Anwendung in Assembler. Die Fertigkeit bestimmt, welcher Code dazu führt, dass Sie das Timing / die Leistung nicht einhalten, und weiß dann, wie Sie dies entweder durch C, Compileroptionen, Auswahl des richtigen Compilers oder 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 vorhanden ist als bei Embedded, empfehle ich Ihnen, häufig zu zerlegen (während Sie herausfinden, wo Ihre Leistungsprobleme liegen). Auf vielen Plattformen ist ohnehin ein 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 den 32-KB-Flash-Teil anstelle des 64-KB-Flash-Teils kaufen möchten und die Entwicklungskosten mit dem Umsatzvolumen decken können, und Vielleicht eine lange Liste anderer Dinge, die Sie sehr gut wählen können, um das Ganze in Assembler, schnell, stromsparend, kostengünstig und zufriedene Kunden zu schreiben.
Abhängig von Ihrem bisherigen Hintergrund sollten Sie sich vielleicht keine Gedanken über das Schreiben in allen Assemblern machen und vielleicht über die elektrotechnischen Aspekte des Einbindens in Mikrocontroller, das Lesen von Schaltplänen, das Wissen über Open Collector, Tri State, Push Pull, PWM, ADC, DAC und a lange Liste anderer Begriffe und wie man sie verwendet. Bit Banging i2c, SPI, MDIO, Dallas One Wire usw. Verwenden eines Oszilloskops als Software-Debugger. Auch wenn Bereiche heute Dinge für Sie hervorheben können (ein zusätzlicher Kostenfaktor), sollten Sie in der Lage sein, i2c und spi sowie einige andere Protokolle ohne die Highlights zu betrachten.
Ich empfehle außerdem, für jede der Plattformen, mit denen Sie spielen, eine andere Sandbox zu verlassen (z. B. die Arduino-Ide / Programmierumgebung). Schreiben Sie den Boot-Code, der den Prozessor vom Zurücksetzen in Ihr main () -Programm führt, und tun Sie so viel wie möglich, um zu verstehen, wie der Flash bis zu dem Punkt geladen / programmiert wird, an dem möglicherweise Ihr eigener Loader geschrieben wird, obwohl dies der Fall ist Dort. Es geht um persönliche Bildung. Je mehr Sie wissen und aus Ihrer Gesäßtasche ziehen und verwenden 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 gesetzt und infolgedessen wurde auf so viele Arten verwandelt und geformt, mikrocodiert, nicht mikrocodiert, mehrkernig, weiter und weiter. Halten Sie das x86 für Hochsprachen und sperrige Betriebssysteme. Verwenden Sie es für Ihren Texteditor und Ihre Compiler und zielen Sie auf etwas anderes ab.
Entschuldigung für die lange Antwort ... hoffe es war hilfreich.
quelle
Der beste Weg, um die Flash- / RAM-Anforderungen für Ihr Projekt zu ermitteln, besteht darin, einen Prototyp zu erstellen und zu messen.
Implementieren Sie die Kernalgorithmen auf einem PC und berechnen Sie die Größe des Objektcodes und die RAM-Nutzung. Auf diese Weise erhalten Sie eine Standardfigur, mit der Sie arbeiten können.
Vergessen Sie nicht, Ihr Budget zu erweitern, wenn Sie sich auf Betriebssystemfunktionen wie Standard- oder Speicherverwaltung verlassen.
Es gibt keine direkte Möglichkeit, Codezeilen mit der kompilierten Codegröße zu vergleichen. Sie können Prozessorarchitekturen jedoch hinsichtlich der Codedichte vergleichen.
quelle
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, sollten Sie sich nicht zu sehr mit den Spezifikationen befassen. 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 dies Fragen, die Sie bei der Auswahl einer bestimmten MCU beantworten müssen?
quelle
Wählen Sie einen Mikrocontroller mit den benötigten Peripheriegeräten. Es wird wahrscheinlich eine Familie von Mikros geben, die das gleiche / ähnliche Peripheriegerät haben, aber unterschiedliche Mengen an RAM und Flash. Beginnen Sie mit dem Chip mit dem größten RAM / Flash. Sobald Sie einen funktionierenden Prototyp haben, können Sie auf ein billigeres Mikro zurückgreifen, wenn Ihr Programm passt.
quelle
Echte Profis wählen einen Mikrocontroller nicht isoliert, sondern führen ein Projekt mit maximalem Gewinn durch. Abhängig von den Projektkriterien, die dazu führen können, dass ein Mikrocontroller ausgewählt wird, der zwar zu teuer erscheint, aber gut zu den verfügbaren Fachkenntnissen, Tools, Bibliotheken usw. passt. Treffen Sie keine isolierten Entscheidungen, sondern berücksichtigen Sie das Gesamtbild vor allem die Summe (Entwicklungskosten + Produktionskosten)!
Die meisten Hersteller von Mikrocontrollern bieten verschiedene Chips an, wobei die Blitzgröß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 Blitzgröße auszuwählen, damit Sie ihn verkleinern können, wenn die Anwendung in einen kleineren Chip passt. Anwendungen wachsen jedoch tendenziell auf alle verfügbaren Größen (und mehr).
Die IME-Flash-Größe ist kein großer Kostenfaktor mehr, auch wenn die Anzahl der Pins weniger wichtig ist. Die RAM-Größe scheint der größte Kostentreiber zu sein.
quelle