Wie arbeiten Mikrocontroller?

Gast #4022037
Lesenswert?

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.
#4022052
Lesenswert?

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
Gast #4022053
Lesenswert?

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.
Gast #4022123
Lesenswert?

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)
Gast #4022249
Lesenswert?

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.
#4022444
Lesenswert?

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.
Gast #4022473
Lesenswert?

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.
#4022547
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren