So finden Sie heraus, ob ein Mikroprozessor leistungsfähig genug ist

Jeder weiß, dass es einfach ist, einen Proof of Concept für ein eingebettetes Gerät auf einem Rasbperry Pi oder sogar einem PC zu entwickeln, obwohl es schwierig ist, sicher zu sein, dass Ihre Wahl Ihr Konzept zum Funktionieren bringt, wenn es um die Auswahl eines Mikroprozessors für Ihr Produkt geht optimal.

Ich habe derzeit ein Media-Streaming-Projekt, das erfolgreich auf dem Himbeer-Pi arbeitet, obwohl der Pi viel zu groß und sperrig ist, um ein richtiges Endgerät zu sein. Es wird auch angegeben, dass das Endgerät benutzerdefiniert ist. Es fällt mir schwer, Vertrauen in Prozessoren zu finden, die ich verwenden kann.

Was ist ein guter Prozess, um herauszufinden, ob ein Prozessor leistungsfähig genug ist, um meine Anwendung auszuführen?

Grundsätzlich sind meine Anforderungen:

  • USB-Host oder eingebetteter TCP/IP-Stack für WLAN-Betrieb
  • I2S/PCM-Medienprotokoll
  • I2C für periphere Konfiguration

Chips mit diesen Eigenschaften zu finden ist sehr, sehr einfach. Es könnte ehrlich gesagt nicht einfacher sein. Das Problem besteht darin, festzustellen, ob der Chip schnell genug ist, was die Verarbeitung und den Betrieb betrifft.

Ich habe mir den LPC4337 ziemlich viel angeschaut und denke, dass er geeignet wäre, obwohl mir die Entwicklungsumgebung ziemlich zu schaffen macht, deshalb schaue ich mich immer noch um, was mich zum CC3200 von Texas Instruments geführt hat , obwohl dieser Controller nur mit 80 MHz läuft und ich nicht sicher bin, ob das für Echtzeit-Medienstreaming stark genug sein wird.

Was sind einige Schritte, um sicherzustellen, dass ein Prozessor schnell genug für meine Anwendung ist? Woher weiß ich beispielsweise, ob ein 80-MHz-Prozessor gut genug ist oder ob ich etwas in der Größenordnung von 204 MHz oder sogar mehr brauche?

Ich denke, Sie müssen auch die Leistungsanforderungen angeben.
Dies beantwortet Ihre Frage nicht, aber Sie könnten sich die neue Mikrocontroller-Familie PIC32MZ ansehen , die über doppelt so viel Flash (2 MB) und dreimal so viel RAM (512 KB) sowie USB 2.0-Host, I²S und fünf I²C verfügt Module zum gleichen Preis wie der LPC4337. Die IDE (MPLAB X) und der Compiler können kostenlos ausprobiert werden, aber nach einer Testphase müssen Sie für den optimierten Compiler bezahlen, wenn Sie einen möchten (der nicht optimierte GCC-Compiler bleibt kostenlos). Microchip verfügt über lizenzfreie Bibliotheken für die USB- und TCP/IP-Stacks.
Ich denke, einige könnten den Punkt der Frage verfehlen. Ich bin nicht auf der Suche nach einer Empfehlung von Teilen. Es ist einfach sicherzustellen, dass genügend Platz auf dem Chip vorhanden ist oder die richtigen Peripheriegeräte vorhanden sind. Ich suche eher nach Verarbeitungsparametern und -schritten als Leitfaden, um sicherzustellen, dass ich einen ausreichend leistungsstarken Prozessor auswähle. Wie in seiner Geschwindigkeit.
Wenn Sie anhand der Spezifikationen nicht erkennen können, was Sie benötigen, können Sie einfach Muster und Prototypen bestellen?
@RogerRowland könnte ich, obwohl das ein sehr langwieriger Prozess ist. Sicherlich gibt es eine Möglichkeit, Mindestspezifikationen für ein Programm zu finden
Ich vermute, dass Sie sowieso einen Prototyp erstellen müssten, um herauszufinden, ob die CPU-Geschwindigkeit wirklich der Engpass ist , um den Sie sich Sorgen machen müssen. Ich weiß, es hilft nicht viel, sorry.
Wow, noch eine weitere Behauptung, dass der Raspberry Pi "zu groß und sperrig" ist? Ich versuche, dem Drang zu widerstehen, altmodisch zu schimpfen wie ein verschrobener alter Mann, wie ich es letztes Mal getan habe.
@davidcary du solltest wahrscheinlich widerstehen. Du klingst nicht, als wolltest du helfen. Und es ist zu sperrig. Es ist eine 700-MHz-Linux-Box mit HDMI-Unterstützung, Multithreading, GUI usw. Ich brauche nur einen einzigen Thread

Antworten (3)

Es hängt davon ab, wie selbstbewusst Sie sein müssen. Ich arbeite in der Raumfahrtindustrie und dies wird normalerweise über das erreicht, was wir "CPU-, RAM-, ROM-Budgets" nennen. Ein Budget, sei es Kosten-Leistungs-Masse oder irgendetwas anderes, zerlegt Ihren Prozess in überschaubare Elemente, die Sie quantifizieren und zusammenfassen können, um die Gesamtnachfrage zu ermitteln. Sie nehmen dann einen Sicherheitsfaktor, der von der Reife Ihres Projekts abhängt und mit der Zeit abnimmt, um dem Nachfragewachstum Rechnung zu tragen. Zu Beginn stützt es sich stark auf Erfahrung und wird dann im Laufe der Zeit verfeinert, wenn Technologien ausgewählt werden.

  • ROM ist relativ einfach. Sie wissen, wie viel ein Stapel / eine Bibliothek / ein Treiber ungefähr an ROM-Speicher benötigt: entweder vom Autor angegeben oder Sie können ihn kompilieren, ohne ihn hochzuladen. Diese Zahl kann sich jedoch aufgrund von Compiler-Optimierungen jedes Mal stark ändern, wenn Sie Ihren Code ändern.
  • RAM ist viel schwieriger. Einige Tools in spezialisierten integrierten Entwicklungsumgebungen geben Ihnen Laufzeitschätzungen , und ich kann sehen, wie dies geschehen könnte, aber mir ist kein generisches Tool bekannt, das beispielsweise von GCC bereitgestellt wird (weiß jemand etwas anderes?). Leider klingt es so, als ob es darauf ankommt, die größten oder am häufigsten zugewiesenen Elemente Ihres Codes zu zählen (unter Berücksichtigung der Lebensdauer von Variablen).
  • Die CPU ist insofern komplexer, als je nach Architektur (CISC oder RISC) die MIPS (Millionen von Anweisungen pro Sekunde, proportional zur CPU-Taktfrequenz) repräsentativ sein können oder nicht. Denn hat man den Code zur Hand, kann man den kritischsten Abschnitt in Anweisungen zerlegen und aus dem Zeitbedarf die benötigten MIPS errechnen. Jeder nicht deaktivierte Interrupt sollte an diesem Punkt als ausgelöst betrachtet werden - Murphys Gesetz und so weiter.

Das Obige ist äußerst schwierig genau zu bestimmen, wann Planer eingreifen, sobald Sie Threads (es sei denn, Threads werden Kernen manuell zugewiesen) und Betriebssysteme haben. Für einfache Mikrocontroller-Codes sollte es überschaubar sein, aber lohnt es sich für Ihre Anwendung?

Dies ist nur meine Beteiligung: Obwohl ich integrierte Systeme entwerfe, war ich nicht für diese speziellen Budgets verantwortlich (die für mich Eingaben sind), und ich bin tatsächlich sehr daran interessiert, die Geschichten von Experten darüber zu erfahren.

Nachtrag: Bei Echtzeitsystemen ist es normalerweise einfacher, die Angemessenheit des Systems für die Aufgabe über die maximale Abtastzeit zu beurteilen, die von Latenz/Verzögerungen bei der Übertragung der Informationen während des gesamten Arbeitsablaufs abhängt, und die jeweils maximal benötigte Zeit Musteraufgabe.

avrdudekann Schätzungen darüber liefern, wie viel RAM von globalen Variablen belegt wird, aber Sie müssen es mit der Probelaufoption ausführen, da es sich im Grunde um ein Upload-Tool handelt.
Der schwierigste Teil, IMO zu schätzen, ist die Stack- und Heap-Nutzung. Unser aktuelles eingebettetes System (proprietäres Betriebssystem), das auf einem PIC32 läuft, hat typischerweise über 25 laufende Tasks, von denen viele ein paar K Heap oder mehr benötigen, wenn sie aktiv sind. Sie bringen mehrere davon zum Laufen, plus eine starke Stack-Nutzung, und Sie können bald fast keinen RAM mehr haben. Ich habe gerade vor ungefähr einer Woche eine rekursive Routine geschrieben und musste sehr vorsichtig mit der Verwendung lokaler Variablenstacks sein (keine Arrays usw.).
Interessant, danke. Schätzen Sie die von Ihrem Code zugewiesene RAM-Menge (Codeanalyse oder bestimmtes Tool) oder messen Sie sie zur Laufzeit? Es scheint mir, dass MIPS etwas schwieriger zu schätzen ist, da es im Gegensatz zur RAM-Nutzung (möglich, nicht einfach) nicht aus der Analyse des Codes geschätzt werden kann, ohne ihn in Anweisungen zu zerlegen. Threads machen die Aufgabe unglaublich schwieriger, aber es hört sich so an, als ob die CPU-Analyse noch mehr Schritte erfordert - es ist im Allgemeinen einfach weniger ein Problem. Was denken Sie?

Ich werde Ihre Frage zu "Wie finde ich heraus, ob ein Mikroprozessor schnell genug ist" vereinfachen?
Sie müssen den Prozess/das Verfahren identifizieren , das die schnellste Ausführungszeit erfordert. Wenn Ihr Prozessor die erforderlichen Anweisungen in der angegebenen Zeit oder weniger ausführen kann, ist er schnell genug.
Schauen wir uns ein Beispiel an: Ihre schnellste Anforderung besteht darin, einen Stromausfall zu verarbeiten ; Dies erfordert die Ausführung von 10.000 Anweisungen in 10 Millisekunden. Sie benötigen eine CPU mit mindestens 1 MIP. Um dies in "MHz" umzurechnen, müssen Sie die Anzahl der Taktzyklen pro Befehl (cci) kennen. Nehmen wir an, es sind 10 cci, Ihre CPU müsste mit 10 MHz oder schneller laufen.

Wenn Sie die Stücklistenkosten senken möchten, haben diese Hersteller in Shenzhen manchmal überraschende Angebote. Ein Beispiel: Allwinner A10 hat mehr Rechenleistung und Anschlussmöglichkeiten als Raspberry Pi, wird aber wahrscheinlich billiger sein, wenn es in Ihrem Design verwendet wird. Wenn Sie die gleichen Kosten wie der Pi betrachten, ist der Allwinner A31s 6-8 mal leistungsstärker.