Deutschland - Kennzeichen Deutschland

Incoterms:DDP
Alle Preise sind inklusive Zoll und Gebühren bei der Auswahl der Versandart.

Bitte bestätigen Sie Ihre Währungsauswahl:

Euro
Versand ist kostenfrei bei den meisten Bestellungen über 50 € (EUR)

US Dollar
Versand ist kostenfrei bei den meisten Bestellungen über $60 (USD)

Bench Talk for Design Engineers

Mouser German Blog

rss

Mouser Electronics, Inc german language blogs


Unterschiede zwischen Python und MicroPython Mike Parks

(Quelle: Quality Stock Arts - stock.adobe.com)

 

Das Programmieren in MicroPython ist vor allem deshalb so beliebt, weil es dem weit verbreiteten CPython ähnelt, das seit fast zwei Jahrzehnten in Desktop-Umgebungen verwendet wird. Dank der nahezu identischen Syntax- und Design-Paradigmen kann der Wechsel zwischen der Embedded- und der Desktop-Entwicklungsumgebung praktisch fließend erfolgen. Dies ist im Zeitalter des Internets der Dinge, in dem Daten von Embedded-Elektronikprodukten auf einer Vielzahl von Plattformen, einschließlich Mobilgeräten, Desktops und der Cloud, zugänglich sein müssen, äußerst vorteilhaft. Wird die Vielfalt an Tools und Programmiersprachen minimiert, kann das Entwicklungspersonal reduziert und die Produktentwicklungszyklen verkürzt werden. Allerdings birgt die Natur von Embedded-Hardware im Vergleich zum Desktop-Computing einige nicht unerhebliche Unterschiede zwischen MicroPython und CPython.

 

Das Ökosystem von Embedded-Elektronik ist im Gegensatz zu Desktops oder Servern in vielerlei Hinsicht eingeschränkt. In erster Linie sind sie durch den Energieverbrauch eingeschränkt. Viele Embedded-Geräte sind batteriebetrieben, sodass die Verlängerung der Batterielebensdauer mit Einschränkungen bei der Leistung verbunden ist. Desktop-Computer können mit mehreren Gigahertz arbeiten, während Mikrocontroller bestenfalls mit Geschwindigkeiten von einigen zehn Megahertz arbeiten. Der begrenzte Speicher und die begrenzte Speicherkapazität sind ebenfalls einschränkende Faktoren, die den Unterschied zwischen CPython und MicroPython erheblich beeinflussen. Da der Speicher nur in Kilobyte oder Megabyte gemessen wird, werden speicherintensive Funktionen oft reduziert oder sogar ganz aus der MicroPython-Implementierung entfernt. Für Entwickler ist es wichtig, die Unterschiede zu kennen, um die langwierige Fehlersuche in ihren eingebetteten Codes zu vermeiden. Hier sind die wichtigsten Unterschiede, die Entwickler kennen sollten:

  • CPython-Entwickler haben Zugang zu Hunderten von vorgefertigten Modulen, die mit einer einzigen Zeile Code einfach in ihre Projekte eingefügt werden können. Diese Module machen es überflüssig, das Rad neu zu erfinden, wenn es darum geht, einem Projekt Funktionalität zu verleihen. Allerdings können viele Module recht viel Speicherplatz beanspruchen. MicroPython eliminiert entweder Module oder bietet maßgeschneiderte Implementierungen von Modulen, die für Embedded-Plattformen entwickelt wurden. Es gibt auch Module, die nur für Embedded-Plattformen geeignet sind, wie z. B. die Schnittstelle zu GPIO-Pins (General Purpose I/O).

 

  • CPython verwendet die automatische Referenzzählung als Mittel zur Speicherverwaltung, während MicroPython eine Speicherbereinigung nutzt. Aus praktischer Sicht versucht MicroPython dann, wenn Speicherplatz zugewiesen werden muss, einen ausreichend großen dynamischen Speicher zu finden. Gelingt dies nicht, versucht MicroPython dann, ungenutzte oder redundante Objekte im Speicher zu löschen. Dies ist ein Prozess, der normalerweise in Millisekunden gemessen wird. Alternativ kann ein Entwickler gelegentlich gc.collect() ausführen, um den Speicher in vorher festgelegten Intervallen zu bereinigen und so sicherzustellen, dass die Speicherbereinigung nicht innerhalb maßgeblicher Codeabschnitte erfolgt.

 

  • Syntaxunterschiede sind wahrscheinlich die Art von Unterschieden, die die meisten Entwickler vor Probleme stellen, insbesondere wenn sie bereits über umfangreiche Erfahrungen mit CPython verfügen, die eine Art „Muskelgedächtnis“ beim Programmieren vermitteln.

 

  • In MicroPython sind Leerzeichen zwischen Zahlen und Schlüsselwörtern erforderlich, in CPython hingegen nicht.

 

  • MicroPython gestattet die Verwendung von := zur Zuweisung an die Variable einer Comprehension; CPython hingegen löst einen Syntaxfehler aus.

 

  • Eines der Designmerkmale, die Python für Programmieranfänger so beliebt machen, ist der Umgang mit Datentypen (z. B. Integer, Boolean, Float). In Python sind alle Datentypen Klassen, und eine Variable ist eine Instanz der Klasse. MicroPython implementiert jedoch nicht das gesamte Objektdatenmodell von CPython. Zu den erwähnenswerten Unterschieden gehören das Fehlen der Mehrfachvererbung, das gegebenenfalls Nichtfunktionieren von __new__ und __del__Spezialmethoden, die andersartige Reihenfolge der Methodenauflösung und die fehlende Unterstützung der Metaklassen.

 

  • Die Verkettung von Ausnahmen ist in MicroPython nicht implementiert. Daher kann MicroPython keine Ausnahmen über verschiedene Abstraktionsschichten eines Programms hinweg erneut auslösen.

 

  • Eingebaute Funktionen werden anders behandelt. MicroPython unterstützt zum Beispiel nicht das Löschen von Arrays.

 

  • In Python sind Funktionen Objekte und haben einen definierten Satz von Attributen, auf die über einen Funktionsaufruf zugegriffen werden kann. Zum Beispiel haben alle Funktionen ein eingebautes Attribut __doc__, das den im Quellcode der Funktion definierten Docstring wiedergibt. Benutzerdefinierte Attribute für Funktionen sind in CPython möglich, werden aber in MicroPython nicht unterstützt. Dies geschieht aufgrund von Speicherbeschränkungen, die typischerweise in Embedded-Systemen auftreten.

 

  • Das Überschreiben von sys.stdin, sys.stdout und sys.stderr ist nicht möglich. Dies sind die Datei-Objekte, die Programmierer für die Standardeingabe, -ausgabe und -fehler verwenden. Auf diese Weise zeigen wir einem Benutzer Text an und erhalten Eingaben vom Benutzer.

 

  • Module, die nicht geladen werden können, werden trotzdem als geladen registriert. Dies soll eine effizientere Handhabung der Module ermöglichen. Das Laden ist also nicht mit der Behandlung von Ausnahmen verbunden. Stellen Sie sicher, dass Sie den Code in einer Entwicklungsumgebung testen, bevor Sie ihn in einer Produktionsumgebung einsetzen!

 

  • Das Attribut environ ist nicht implementiert. Stattdessen müssen Entwickler die getenv()-, putenv()- und unsetenv()-Methoden verwenden, um Umgebungsvariablen festzulegen und zu erhalten. Beachten Sie, dass getenv()nur die Übergabe eines Arguments erlaubt.

 

  • Die Funktion print() überprüft keine rekursiven Datenstrukturen (z. B. rekursive Listen), wie es CPython tut. MicroPython prüft die Stack-Nutzung, sodass die Ausgabe einer rekursiven Datenstruktur nicht zu einem Absturz infolge eines Stack-Overflows führen kann.

 

  • Fehlermeldungen für Methoden können unerwartete Argumentanzahlen anzeigen, da MicroPython „self“ als Argument zählt. Stellen Sie sicher, dass diese Tatsache bei der Arbeit mit Fehlermeldungen beachtet wird.

 

  • JSON (JavaScript Object Notation) ist ein beliebtes Datenaustauschformat, das von vielen IoT-Endgeräten zur effizienten Kommunikation mit der Cloud verwendet wird. Das MicroPython JSON-Modul löst keine Ausnahme aus, wenn ein JSON-Objekt nicht serialisierbar ist.

 

  • Das struct-Modul konvertiert zwischen Python-Werten und C-Strukturen, die als Python-Byte-Objekte dargestellt werden. Dies ermöglicht einen effizienten Umgang mit Binärdaten, die in Dateien gespeichert sind oder von Netzwerkverbindungen oder seriellen Protokollen stammen, die häufig von Sensoren verwendet werden. Leider prüft die Funktion struct.pack(format, v1, v2) nicht, ob ihr die richtige Anzahl von Argumenten übergeben wurde – anders die CPython-Implementierung, die die Anzahl der Argumente prüft.

 

  • Die Fähigkeit, nach einer ganzen Zahl in einem Array zu suchen, ist nicht implementiert. Daher führt der folgende Code zu einem Fehler:

 

import array as array

a = array.array('i', [1, 2, 3, 4])

print(1 in a)

 

CPython würde falsch ausgeben, MicroPython hingegen eine nicht implementierte Fehlermeldung.

 

MicroPython ist eine leistungsstarke und dennoch einfach zu verwendende Programmiersprache für die Entwicklung von eingebetteten Applikationen. Allerdings ist sie im Vergleich zu den funktionsreicheren Python-Implementierungen, die für die Erstellung von Desktop- und Cloud-nativen Applikationen verwendet werden, eingeschränkt. Einige Unterschiede können in zukünftigen Versionen von MicroPython behoben werden, oder es können neue Unterschiede entstehen, wenn neue Funktionen zur Referenzimplementierung von Python hinzugefügt werden. Die neuesten Unterschiede zwischen CPython und MicroPython finden Sie in der offiziellen Dokumentation von MicroPython auf deren Website.



« Zurück


Michael Parks, P.E. ist der Eigentümer von Green Shoe Garage, einem Entwicklungsstudio für kundenspezifische Elektronik und Technologieberatung im Süden von Maryland. Er produziert den S.T.E.A.M. Power-Podcast (ein Podcast über MINT-Themen), mit dem er die Öffentlichkeit für technische und wissenschaftliche Fragen sensibilisieren möchte. Michael ist außerdem zugelassener Ingenieur im Bundesstaat Maryland und hat einen Master-Abschluss in Systemtechnik von der Johns Hopkins University.


Alle Autoren

Alle anzeigen Alle anzeigen
Blog nach Datum anzeigen