{"id":18,"date":"2015-06-12T20:44:49","date_gmt":"2015-06-12T20:44:49","guid":{"rendered":"http:\/\/madgyver.de\/?p=18"},"modified":"2024-01-17T23:29:15","modified_gmt":"2024-01-17T23:29:15","slug":"arduino-assembler-tutorial-introduction","status":"publish","type":"post","link":"https:\/\/madgyver.de\/de\/arduino-assembler-tutorial-introduction\/","title":{"rendered":"Arduino Assembler Tutorial : Einf\u00fchrung"},"content":{"rendered":"<p><strong>Was hat es mit Assembler \u00fcberhaupt auf sich?<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>Kurz gesagt, ist der Unterschied zwischen Assembler und einer anderen Hochsprache \u00e4hnlich wie wenn man selbst ein Auto f\u00e4hrt (Assembler) und sich ein Taxi rufen (Hochsprache).<\/p>\n<p>Wenn man Auto fahren will, muss man\u00a0erst einmal wissen wie man alles bedient\u00a0und die Verkehrsregeln kennen. Das Fahren von einem Punkt zum anderen ben\u00f6tigt\u00a0viele komplexe Man\u00f6ver.\u00a0Man muss ausparken k\u00f6nnen, im Verkehr navigieren k\u00f6nnen, auf\u00a0\u00a0Ampeln, Schilder und Verkehrsregelungen achten, weider einparken etc. Diese Man\u00f6ver selbst \u00a0ben\u00f6tigen wieder\u00a0verschiedene kleinere Aufgaben wie hoch und runter schalten, Bremsen, Beschleunigen und das Beobachten Verkehrs.<\/p>\n<p>Ein Taxi rufen ist da viel einfacher, da der Fahrer\u00a0\u00a0alles f\u00fcr einen \u00fcbernimmt. Man\u00a0muss\u00a0\u00a0ihm nur sagen, wo man hin will, vielleicht sagt man ihm noch\u00a0\u00a0die Route, die Sie bevorzugen.\u00a0Die Gesamte Fahrerei wird einem aber abgenommen.\u00a0Beide Methoden\u00a0<del>werden<\/del>\u00a0k\u00f6nnen einen\u00a0zum Ziel f\u00fchren.<\/p>\n<p>Assembler und C ++ verhalten sich da sehr \u00e4hnlich. Mit\u00a0Assembler steuert man die\u00a0Maschine (den Microcontroller, in diesem Fall den Arduino) selbst. Man muss aber alle Hebel (Bits) selber bet\u00e4tigen und und genau im Auge behalten\u00a0wo man seine\u00a0\u00a0Daten speichert. In einer Hochsprache wie C ++ braucht man \u201enur\u201czu erkl\u00e4ren was man\u00a0tun m\u00f6chte, und die Toolchain\u00a0k\u00fcmmert sich beim Kompilieren um alle Details. Programmierung in einer Hochsprache verbirgt alle Details des Controllers. Dies ist auch vollkommen\u00a0in Ordnung, das ist genau was sie\u00a0tun soll. Viele Algorithmen k\u00f6nnen auf diese Weise leichter beschrieben werden.<\/p>\n<p><strong>Wenn Assembler verwenden<\/strong><\/p>\n<p>Bis jetzt klingt es so als ob das Programmieren in\u00a0Assembler umst\u00e4ndlich und Aufwendig ist, und an sich ist dem auch so. Alle Feinheiten und Details eines\u00a0Mikrocontroller zu beachten w\u00e4hrend man\u00a0programmiert\u00a0erfordert viel Aufwand und Zeit. Man sollte dabei immer bedenken, dass die wichtigste Ressource beim Programmieren nicht\u00a0Flashspeicher, RAM oder die Anzahl der Pins ist, sondern die Entwicklungszeit.<\/p>\n<p>Auch ist es so, dass sich Assembler-Code nicht leicht wiederverwenden\u00a0und umschreiben l\u00e4sst. Wenn man z.B. die\u00a0Controllerfamilien \u00e4ndert, dann gestaltet sich\u00a0die Wiederverwendung von Code als \u00e4usserst schwierig, gro\u00dfe Teile des Codes m\u00fcssen neu geschrieben werden. Es ist auch sehr zeitaufwendig gr\u00f6\u00dfere Projekte in Assembler zu verwirklichen.<\/p>\n<p>Assembler hat aber\u00a0einige Vorteile, die\u00a0enorm ins Gewicht fallen k\u00f6nnen:<\/p>\n<ol>\n<li>Man lernt\u00a0eine Menge \u00fcber die MCU-Architektur, was\u00a0wiederum beim n\u00e4chsten Projekt hilfreich sein kann<\/li>\n<li>Es gibt Ihnen un\u00fcbertroffene\u00a0Kontrolle \u00fcber die Hardware<\/li>\n<li>Im Falle korrekter\u00a0optimierung, ist Assembler unglaublich schnell<\/li>\n<li>Assembler-Code verbraucht sehr wenig Speicher\u00a0\u00a0im Vergleich<\/li>\n<\/ol>\n<p>Der beste Weg ist es, meiner Meinung nach, \u00a0ein\u00a0Projekt komplett in C ++ Code zu schreiben und dann nur wichtige Teile in Assembler zu optimieren. Dabei eigenen sich zeit- oder speicherintensive\u00a0Funktionen am besten. C ++ gibt einen\u00a0die Flexibilit\u00e4t, um alles schnell zu erledigen. In der Praxis ist ein sehr gro\u00dfer Teil eines\u00a0Projektes unkritisch\u00a0und profitiert nicht von Optimierung.<br \/>\nBeispiel aus der Praxis: Nehmen wir an m\u00f6chten zu Debugzwecken\u00a0einige Daten \u00fcber die serielle Schnittstelle Ausgeben. Die Umsetzung auf einem Arduino in C ++ nimmt fast keinen Aufwand \u00fcberhaupt, wenn man die Standartbibliotheken verwendet. Das Schreiben des Codes in Assembler auf der anderen Seite wird immer mehr Zeit in Anspruch nehmen, auch wenn man\u00a0alten\u00a0Code wiederverwendet. Aber hier ist das Ding: Aus praktischer Sicht bringt einem die Implementierung in Assembler \u00fcberhaupt keinen Vorteil!<\/p>\n<p>Es verbraucht aber mehr \u00a0Zeit und Energie.<br \/>\nAuf der anderen Seite,\u00a0wenn im Projekt Algorithmen verwendet werden, die schnell ausgef\u00fchrt werden m\u00fcssen, Dann besteht die M\u00f6glichkeit diese in Assembler zu optimieren.<\/p>\n<p>Weiter geht es mit dem praktischen Beispiel:\u00a0Blink Arduino Sketch\u00a0mit Assembler implementiert<\/p>","protected":false},"excerpt":{"rendered":"<p>Was hat es mit Assembler \u00fcberhaupt auf sich? &nbsp; Kurz gesagt, ist der Unterschied zwischen Assembler und einer anderen Hochsprache&hellip;<\/p>\n","protected":false},"author":1,"featured_media":69,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[12],"tags":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/madgyver.de\/wp-content\/uploads\/2015\/06\/Arduino-Assembler.jpg","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5OAKZ-i","_links":{"self":[{"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/posts\/18"}],"collection":[{"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/comments?post=18"}],"version-history":[{"count":5,"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/posts\/18\/revisions"}],"predecessor-version":[{"id":132,"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/posts\/18\/revisions\/132"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/media\/69"}],"wp:attachment":[{"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/media?parent=18"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/categories?post=18"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/madgyver.de\/de\/wp-json\/wp\/v2\/tags?post=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}