Rechnen Sie rechenintensive Projekte mit dem ShieldBuddy

Von Clive „Max“ Maxfield

Zur Verfügung gestellt von Nordamerikanische Fachredakteure von DigiKey

Viele Hobbyisten, Hersteller und Heimwerker verwenden Arduino Mikrocomputer-Entwicklungsboards zur Überwachung und Steuerung ihrer Projekte. Das Gleiche gilt für eine wachsende Zahl professioneller Ingenieure, die diese Boards als Evaluierungs- und Prototyping-Plattformen nutzen können, um die Entwicklung zu beschleunigen und die mit der Evaluierung von integrierten Schaltkreisen (ICs), Sensoren und Peripheriegeräten verbundenen Kosten zu senken. Wie in Arduino BOBs zur schnellen Evaluierung von Sensoren und Peripheriegeräten< besprochen wurde, arbeiten diese Ingenieure möglicherweise in kleineren Teams mit engeren Time-to-Market (TTM)-Vorgaben. Als solche mussten sie mehrere technische Domänen und Aufgabenbereiche abdecken und gleichzeitig Wege finden, um die Evaluierung von Komponenten zu beschleunigen und die Kosten zu senken.

Eine Lösung ist der Einsatz von Arduinos zusammen mit Open-Source-Hardware in Form von Sensor- und Peripherie-Breakout-Boards (BOBs) in Verbindung mit Open-Source-Software mit zugehörigen Bibliotheken und Beispielprogrammen. Zwar gibt es eine Vielzahl von Arduino-Boards, um eine Reihe von Verarbeitungs- und Speicheranforderungen zu erfüllen, einige Berechnungen lassen sich jedoch besser mit einer Gleitkommaeinheit (FPU) durchführen, um den Hauptprozessor nicht zu verlangsamen. Dieses Problem wurde innerhalb des Arduino-Ökosystems durch den ShieldBuddy angegangen.

Dieser Artikel beschreibt verschiedene Optionen der Arduino-Verarbeitungsplattform und warum die FPU-Fähigkeit für viele Anwendungen so wichtig ist. Dann wird es den ShieldBuddy einführen, ein Board, das eine ähnliche physikalische Grundfläche wie Arduino-Boards aufweist, aber drei unabhängige 32-Bit-Verarbeitungskerne hat, die jeweils mit 200 MHz arbeiten und jeweils eine eigene FPU besitzen. Der Artikel beschreibt sein Programmiermodell und zeigt, wie seine Eclipse-basierte Programmierumgebung und seine Unterstützung der integrierten Entwicklungsumgebung (IDE) von Arduino Heimwerkern und Designern einen schnellen Einstieg ermöglicht.

Arduino für Neuankömmlinge und Fachleute

Neueinsteiger in das Arduino-Universum beginnen typischerweise mit dem Arduino Uno Rev3 (Abbildung 1), der auf dem 8-Bit ATmega328P Mikrocontroller basiert, der mit 16 Megahertz (MHz) arbeitet. Diese Karte hat nur 32 Kilobyte (Kbytes) Flash-Speicher (Programmspeicher), 2 Kbytes SRAM, 14 digitale Ein-/Ausgangspins (E/A) und sechs analoge Eingangspins. Sechs der digitalen Pins können PWM-Ausgänge (Pulsweitenmodulation) bereitstellen, und die analogen Pins können bei Bedarf auch als digitale I/O-Pins verwendet werden.

Bild der Arduino Uno Rev3 Entwicklungsplatine<Abbildung 1: Das Arduino Uno Rev3 Entwicklungsboard basiert auf dem 8-Bit ATmega328P Mikrocontroller, der mit 16 MHz läuft. (Bildquelle: Arduino.cc).

Die Grundfläche der Arduino Uno Rev3 Stiftleisten mit 14 digitalen E/A-Pins, 6 analogen Eingangspins und verschiedenen Strom-, Masse- und Referenzpins ist die Grundlage für ein enormes Ökosystem von Tochterkarten, die als Shields bezeichnet werden.

Viele Anwender des Uno Rev3 kommen später zum Arduino Mega 2560 Rev3 Board (Abbildung 2), das auf dem 8-Bit ATmega2560Mikrocontroller basiert, der mit 16 MHz arbeitet. Diese Karte verfügt über 256 KByte Flash-Speicher und 8 KByte SRAM. Aufgrund der Grundfläche seiner Stiftleisten kann er die gleichen Abschirmungen wie der Uno tragen, jedoch ermöglichen zusätzliche Stiftleisten die Aufnahme von 54 digitalen E/A-Pins und 16 analogen Eingangspins. In diesem Fall können 15 der digitalen Pins PWM-Ausgänge bereitstellen, und - einmal mehr - die analogen Pins können bei Bedarf auch als digitale I/O-Pins verwendet werden.

Bild der Arduino Mega 2560 Rev3 EntwicklungsplatineAbbildung 2: Das Arduino Mega 2560 Rev3 Entwicklungsboard basiert auf dem 8-Bit ATmega2560 Mikrocontroller, der mit 16 MHz läuft. Aufgrund der Grundfläche seiner Stiftleisten kann er die gleichen Abschirmungen wie der Arduino Uno tragen, verfügt aber zusätzlich über zusätzliche Stiftleisten, die insgesamt 54 digitale E/A-Pins und 16 analoge Eingangspins zur Verfügung stellen. (Bildquelle: Arduino)

Zusätzlich zu den Einschränkungen, die ein 8-Bit-Datenpfad und ein 16-MHz-Takt auferlegt, enthalten weder die Arduino Uno- noch die Arduino Mega-Mikrocontroller eine FPU, was bedeutet, dass alle Berechnungen mit Fließkommawerten diese Prozessoren dramatisch verlangsamen.

Für diejenigen Benutzer, die noch mehr Rechenleistung wünschen, ist der nächste Schritt der Arduino Due (Abbildung 3), der eine ähnliche physikalische Grundfläche wie der Arduino Mega hat, der jedoch auf dem 32-Bit Atmel/Mikrochip-Technologie SAM3X8E Arm® Cortex®-M3-Prozessor basiert, der mit 84 MHz läuft. Diese Karte verfügt über 512 KByte Flash-Speicher, 96 KByte SRAM, 54 digitale E/A-Pins, 12 analoge Eingangspins und zwei analoge Ausgangspins, die von Digital-Analog-Wandlern (DACs) angesteuert werden. In diesem Fall können nur 12 der digitalen Pins PWM-Ausgänge bereitstellen, und - einmal mehr - die analogen Pins können bei Bedarf auch als digitale I/O-Pins verwendet werden. Leider enthält der Prozessor des Arduino Due, wie der Arduino Uno und Mega, keine FPU.

Bild von Arduino Due Entwicklungsboard<Abbildung 3: Das Arduino Due Entwicklungsboard basiert auf dem 32-Bit Atmel SAM3X8E Arm Cortex-M3-Prozessor mit 84 MHz. Der Fußabdruck seiner Header ist identisch mit dem der Arduino Mega. (Bildquelle: Arduino.cc)

Viele Benutzer - sowohl Hobbyisten als auch Profis - erfreuen sich an den hohen Pin-Zahlen der Entwicklungsboards Arduino Mega und Arduino Due. Aber selbst der 32-Bit-Prozessor des Arduino Due, der mit 84 MHz läuft, kann für einige rechenintensive Aufgaben unzureichend sein. Ebenso könnten die 512 KByte Flash-Speicher und 96 KByte SRAM des Due für umfangreichere Programme, die mit großen Datenmengen arbeiten, unzureichend sein.

Während Mikrocontroller in der Lage sind, die Verarbeitung immer größerer Datenmengen zu handhaben, werden einige Berechnungen besser mit FPUs durchgeführt, um eine höhere Effizienz und geringere Latenzzeiten zu erzielen.

Was sind FPUs und warum werden sie benötigt?

Die Gründe, warum FPUs nützlich sind, gehen darauf zurück, wie Computer mit Zahlen umgehen. Die einfachste Art, Zahlen in Computern darzustellen, ist die Verwendung von ganzen Zahlen (whole numbers). Auch die Durchführung von Berechnungen unter Verwendung von ganzen Zahlen ist rechnerisch günstig. Allerdings sind ganze Zahlen von Natur aus endlich und können keinen großen Dynamikbereich ausdrücken.

Dies ist für Ingenieure und Wissenschaftler problematisch, da sie oft extrem große und kleine Werte in ein und derselben Berechnung verwenden müssen. Zum Beispiel können Physiker Berechnungen haben, die die numerischen Werte der Lichtgeschwindigkeit (300.000.000) und der Newtonschen Gravitationskonstante (0,000000000000006674) verwenden. In ähnlicher Weise benötigen Ingenieure Werte mit einem großen Dynamikbereich für Aufgaben wie die digitale Signalverarbeitung (DSP) und für den Einsatz in Anwendungen der künstlichen Intelligenz (AI) und des maschinellen Lernens (ML).

Die Lösung besteht in der Verwendung der numerischen Fließkommadarstellung, bei der der Dezimalpunkt in Bezug auf die einzelnen Ziffern der Zahl "schweben" kann, wodurch ein feinerer Grad an numerischer "Auflösung" erreicht werden kann. Das Problem besteht darin, dass ein 32-Bit-Gleitkommawert zwar den gleichen Speicherplatz verbraucht wie eine 32-Bit-Festkommazahl, die Durchführung von Berechnungen mit Gleitkommawerten jedoch wesentlich mehr Rechenressourcen erfordert.

Wenn der Prozessor verpflichtet ist, Fließkomma-Berechnungen mit Standard-Festkomma-Hardware durchzuführen, wird das Ergebnis die Leistung dieses Prozessors dramatisch beeinträchtigen. Die Lösung besteht darin, den Prozessor mit einer speziellen FPU auszurüsten. Auf diese Weise können anspruchsvolle Gleitkommaoperationen mit sehr wenigen Taktzyklen ausgeführt werden.

Hier kommt der ShieldBuddy ins Spiel.

ShieldBuddy bringt FPUs und hohe Leistung in das Arduino-Ökosystem

Ein relativ neuer Spieler im Arduino-kompatiblen Bereich, Infineon Technologies' KITAURIXTC275ARDSBTOBO1, oder ShieldBuddy (Abbildung 4), ist ein eingebettetes Evaluierungsboard für Infineons TC275T64F200WDCKXUMA1 TC275 AURIX TC2xx TriCore 32-Bit-Mikrocontroller.

Das Bild des ShieldBuddy TC275 ist mit dem 32-Bit-Multicore-Prozessor TC275 von Infineon ausgestattet.Abbildung 4: Der ShieldBuddy TC275 ist mit dem Infineon TC275 32-Bit-Multicore-Prozessor auf einer Platine mit der gleichen Grundfläche wie der Arduino Mega und der Arduino Due ausgestattet, wodurch er mit vielen der verfügbaren Application Shields kompatibel ist.(Bildquelle: Hitex.com)

Der ShieldBuddy hat einen ähnlichen Platzbedarf wie der Arduino Mega und der Arduino Due und ist mit vielen der Anwendungsabschirmungen kompatibel. Er unterscheidet sich jedoch durch die Verwendung des TC275 mit seinen drei unabhängigen 32-Bit-Kernen, die jeweils mit 200 MHz arbeiten und jeweils eine eigene FPU besitzen. Darüber hinaus verfügt der ShieldBuddy über 4 Megabyte (Mbytes) Flash-Speicher (8x das 8-fache des Arduino Due und 16x das 16fache des Arduino Mega) und 500 KByte RAM (5x das 5x das Arduino Due und 62x das Arduino Mega).

Eine Möglichkeit, dies zu betrachten, ist, dass der Kern des Arduino Mega nur etwa sechzehn 8-Bit-Instruktionen pro Mikrosekunde (µs) verwaltet. Zum Vergleich: Jeder der Kerne des TC275 hat eine Zykluszeit von 5 Nanosekunden (ns), was bedeutet, dass jeder Kern typischerweise etwa 150 bis 200 32-Bit-Befehle/µs ausführen kann. Da jeder der Prozessorkerne des ShieldBuddy über eine eigene FPU verfügt, kann die Karte Fließkomma-Berechnungen ohne oder mit nur geringen Leistungseinbußen durchführen.

Entwickeln mit dem ShieldBuddy

Bei der Arbeit mit dem ShieldBuddy möchten professionelle Softwareentwickler möglicherweise eine Eclipse-IDE verwenden, während Hobbyisten und Hersteller es vorziehen, die vertraute Arduino-IDE zu verwenden. Beide Optionen werden unterstützt.

Benutzer des Arduino werden mit der Tatsache vertraut sein, dass jede Skizze (Programm) zwei Standardfunktionen haben muss: setup(), die einmal ausgeführt wird, und loop(), die immer wieder ausgeführt wird. Benutzer können auch eigene Funktionen erstellen.

Die drei Kerne des ShieldBuddy werden als Kern 0, Kern 1 und Kern 2 bezeichnet. Im Falle der Arduino-IDE können die meisten vorhandenen Skizzen für die Verwendung auf dem ShieldBuddy ohne Änderungen zusammengestellt werden. Standardmäßig werden die setup()- und loop()-Funktionen - zusammen mit allen vom Benutzer erstellten Funktionen, die sie aufrufen - so kompiliert, dass sie auf Core 0 laufen.

Bei der Erstellung eines neuen Programms kann der Benutzer den gleichen Effekt erzielen, indem er diese Funktionen setup0() und loop0() nennt. Der Benutzer kann auch setup1()- und loop1()-Funktionen erstellen, die - zusammen mit allen vom Benutzer erstellten Funktionen, die sie aufrufen - automatisch kompiliert werden, um auf Core 1 ausgeführt zu werden. In ähnlicher Weise werden die setup2()- und loop2()-Funktionen zusammen mit allen Funktionen, die sie aufrufen, automatisch kompiliert, um auf Core 2 ausgeführt zu werden.

Standardmäßig läuft jeder Kern unabhängig, was bedeutet, dass es möglich ist, drei völlig getrennte Programme gleichzeitig auf dem ShieldBuddy laufen zu lassen. Allerdings können die Kerne auch untereinander kommunizieren, indem sie Techniken wie Shared Memory verwenden. Darüber hinaus kann jeder Kern weiche Unterbrechungen in den anderen Kernen auslösen.

Fazit

Das Open-Source-Konzept von Arduino hat sich als äußerst erfolgreich erwiesen, und die daraus resultierenden Hardware- und Software-Ökosysteme sind so gewachsen, dass sie Hunderte von Schutzschilden und Tausende von Bibliotheken und Anwendungen umfassen.

Obwohl frühe Arduino-Entwicklungs-Boards wie das 8-Bit, 16 MHz Arduino Uno und Arduino Mega etwas eingeschränkt waren, sind neuere Implementierungen wie das 32-Bit, 84 MHz Arduino Due wesentlich leistungsfähiger. Trotzdem benötigen viele Anwender mehr Programmplatz (Flash), mehr Datenplatz (SRAM) und mehr Rechenleistung als jedes traditionelle Arduino bieten kann.

Mit 4 MByte Flash-Speicher, 500 KByte SRAM und drei unabhängigen 32-Bit-Prozessorkernen, die mit 200 MHz laufen und jeweils über eine eigene FPU verfügen, hebt der ShieldBuddy das Arduino-Konzept auf eine ganz neue Ebene und macht es für extreme Heimwerker und professionelle Ingenieure gleichermaßen interessant.

Empfohlene Lektüre:

  1. Elektronik für absolute Anfänger lehren
  2. Schnelles und einfaches Anwenden von FPGAs mit dem Arduino MKR Vidor 4000
  3. Mit einem einfach zu handhabenden Arduino-Starterkit in die Welt der Hersteller einsteigen
DigiKey logo

Haftungsausschluss: Die Meinungen, Überzeugungen und Standpunkte der verschiedenen Autoren und/oder Forumsteilnehmer dieser Website spiegeln nicht notwendigerweise die Meinungen, Überzeugungen und Standpunkte der DigiKey oder offiziellen Politik der DigiKey wider.

Über den Autor

Image of Max Maxfield

Clive „Max“ Maxfield

Clive „Max“ Maxfield erhielt 1980 seinen BSc in Regelungstechnik von der Sheffield Hallam University, England, und begann seine Karriere als Entwickler von Zentraleinheiten (CPUs) für Großrechner. Im Laufe der Jahre hat Max alles von Siliziumchips bis hin zu Leiterplatten und von Gehirnwellenverstärkern bis hin zu Steampunk-Prognosemaschinen (bitte nicht fragen) entwickelt. Darüber hinaus ist er seit mehr als 30 Jahren an der Spitze der Electronic Design Automation (EDA) tätig.

Max ist Autor und/oder Co-Autor einer Reihe von Büchern, darunter „Designus Maximus Unleashed“ (in Alabama verboten), „Bebop to the Boolean Boogie“ (Ein unkonventioneller Leitfaden zur Elektronik), „EDA: Where Electronics Begins“, „FPGAs: Instant Access“ und „How Computers Do Math“. Werfen Sie auch einen Blick auf seinen Blog „Max's Cool Beans“.

Über den Verlag

Nordamerikanische Fachredakteure von DigiKey