Hallo, ich habe eine kurze Frage welche ich jedoch beim Googeln nicht herausfinden konnte. Wenn ein Mikrocontroller einen sehr rechenintensive Aufgabe zu erledigen hat, z.B. die Erstellung eines MD5-Hashes, erzeugt der Mikrocontroller den Hash zuerst und arbeitet dann die restliche Source ab oder wird mit jedem neuen Durchgang ein bisschen mehr vom Hash errechnet? Ich hoffe man kann verstehen wie ich das meine, ist schwer zu beschreiben.
Beides ist möglich, je nach dem ob Multitasking genutzt wird oder nicht. Bei ersterem kann es sein, dass auch noch andere Threads aktiviert werden. Es ist auch abhängig davon, ob die Aufgabe überhaupt unterbrechbar ist. Es ist Aufgabe des Programmierers festzulegen was der Controller macht. Gruß Dennis
Ok, danke für die Antwort. Weißt du zufällig (ich hab das Gefühl ich mach mich mit der Frage jetzt nicht beliebt ;)) wie dies in der Arduino IDE funktioniert?
Die Art der Programmierung ist unabhängig von der IDE! Die ist (vereinfacht) nur für das Erstellen des Programms zuständig. Du kannst ja in Word auch ein Gedicht oder einen Roman schreiben.. Hausaufgabe für dich: Erkläre die Begriffe IDE, Compiler, Mikrocontroller, Interrupts und Linker... ;-) Hilfe gibt es auch hier im AVR-Tutorial. Gruß Dennis
Frage schrieb: > arbeitet dann die restliche Source ab oder wird mit > jedem neuen Durchgang ein bisschen mehr vom Hash errechnet Kommt drauf an, wie das programmiert ist. Ein PC z.B. ist so schnell, daß er fast immer auf irgend etwas wartet. Während dieser Zeit kann er im Hintergrund irgendwelche wenig wichtige Dinge erledigen, wie z.B. Bildschirmschoner, Videos codieren, oder auch nur die Uhrzeit weiterzählen. Gewöhnlich werden diese Programm nach kurzer Zeit von einem Hardwaretimer unterbrochen, und dann schaut der Prozessor in einer Liste nach, was jetzt das Wichtigste ist, und dann rechnet er ein bischen an dem anderen Programm, bis er wieder unterbrochen wird. Gewöhnlich sind die Programme von Mikrocontrollern aber einfacher gestrickt, u.a. weil solche Verwaltungsaufgaben selber einiges an Rechenzeit und Speicher verbrauchen.
Frage schrieb: > erzeugt der Mikrocontroller > den Hash zuerst und arbeitet dann die restliche Source ab oder wird mit > jedem neuen Durchgang ein bisschen mehr vom Hash errechnet? Das hängt vom Algorithmus ab, den du als Programmierer verwendet / welche Anforderung du hast. a) Du rechnest alles in einem Schritt, weil dein Programm eh nichts dazwischen machen kann. (lang lebe die Warteschleife) b) Du zerlegst die Aufgabe in kleine Schritte/Funktionen mit begrenzter Laufzeit und rechnest Periodisch exakt einen Teilschritt (kooperatives Multitasking). Eine/mehrere Funktionen werden mehrfach aufgerufen, bis ein Ergebnis fertig ist. c) Du nutzt Interrupts/OS, welches deine Funktion nach Zeit oder Ereignissen unterbricht und später die Aufgabe fortsetzt. (preemptive Multitasking) a) ist einfach zu verstehen und zu programmieren. Wird deshalb gerne gemacht, auch an Stellen wo es eigentlich unangebracht ist. b) Braucht eine Schleife, die periodisch aufgerufen wird. c) setzt Threads / ein OS voraus. Alle 3 haben Ihre Berechtigung. Informationen sollten in der Dokumentation der Bibliothek stehen. Bei Arduino rate ich auf a)
Kausalitaet bitte. Ein Controller macht nicht einfach etwas. Sondern was es machen soll. In der Abfolge wie vorgesehen.
Hallo, die c't hacks hatte mal einen Artikel zu Multitasking mit dem Arduino. http://www.heise.de/artikel-archiv/ch/2013/04/152_Multitasking-mit-Arduino Ohne das es böse gemeint ist: Du hättest auch einfach googeln können. Jst
Postkunde schrieb: > Kausalitaet bitte. Ein Controller macht nicht einfach etwas. Sondern was > es machen soll. In der Abfolge wie vorgesehen. Korrektur: Er macht das, was man programmiert hat. In der Abfolge, wie's im Programm steht (zumindest grob).
Rolf Magnus schrieb: > Korrektur: Er macht das, was man programmiert hat. In der Abfolge, wie's > im Programm steht (zumindest grob). Woher soll das Programm wissen, wann ein äußeres Ereignis eintritt. Er macht nicht "was man programmiert hat", sondern er verhält sich so, wie man es programmiert hat. Das ist ein riesen Unterschied. Sonst könnte er nicht, abhängig von irgendwelchen Bedingungen, unterschiedlich reagieren.
Paul Baumann schrieb: >>Wie arbeiten Mikrocontroller? > > Meist lautlos. Falsch, unterm Mindestlohn!
Wolfgang schrieb: > Rolf Magnus schrieb: >> Korrektur: Er macht das, was man programmiert hat. In der Abfolge, wie's >> im Programm steht (zumindest grob). > > Woher soll das Programm wissen, wann ein äußeres Ereignis eintritt. Er > macht nicht "was man programmiert hat", sondern er verhält sich so, wie > man es programmiert hat. Das ist ein riesen Unterschied. Sonst könnte er > nicht, abhängig von irgendwelchen Bedingungen, unterschiedlich > reagieren. Wenn man programmiert hat, daß er auf ein Ergebnis reagieren soll, dann reagiert er auf ein Ergebnis, weil das das ist, was man programmiert hat.
Quatsch, ein Controller macht immer Dinge, die man gar nicht so geschrieben hat. Zumindest geschieht das bei den meisten Forenteilnehmern. Das berühmte Abstürzen oder einfach wieder von Vorne anfangen, sind solche Dinge. Wenn er einen MD5 Hash berechnen soll, kommen immer nur wilde Zahlenreihen heraus, die nur so aussehen, als sei es MD5. Und das passiert, weil der Controller immer genau das macht, was in seinem Programmspeicher steht.
Blaurock schrieb: > Quatsch, ein Controller macht immer Dinge, die man gar nicht so > geschrieben hat. Kann passieren, ist dann ausgelöst durch einen Bug im Compiler oder im Controller selber. > Und das passiert, weil der Controller immer genau das macht, was in > seinem Programmspeicher steht. Und das ist das, was man programmiert hat. Wie sollte es denn sonst in den Programmspeicher kommen? Es ist eben nur nicht immer das, was man eigentlich beabsichtigt hat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.