Hallo, ich suche ein Buch oder Tutorial, welches erklärt wie man einen Mikrocontroller optimal ausnutzt. Also wenn der Controller mehrere Funktionen abarbeiten soll, dass dieser zb. nicht so lange in Delay-Schleifen hängt weil er ja in dieser Zeit andere Aufgaben erledigen kann. Gibt es dazu irgendwelche Techniken ?? Gruß Andre
Gast
#1564707
Ja. Gibt es. Willkommen in der Realitaet. Die Technologie heisst Realtime programmierung. (Echtzeit) Viel Glueck mit Gurgel
Gast
#1564783
Na, ich fing auch mal klein an. Mit Büchern wie Mikrocontroller-Kochbuch von Andreas Roth, und aus dem Elektor-Verlag. Bevor es Internet gab. Heute, würde ich alles wichtige im Internet finden, wenn nicht sogar hier im Forum.
Nunu Stone schrieb: > Also wenn der Controller mehrere Funktionen abarbeiten soll, dass dieser > zb. nicht so lange in Delay-Schleifen hängt weil er ja in dieser Zeit > andere Aufgaben erledigen kann. > > Gibt es dazu irgendwelche Techniken ?? Keine _delay_xx Funktionen benutzen? Im Ernst, die Technik heißt hier im Forum 'Jobflags benutzen'. Für jede Aufgabe gbt es ein Flag, das anzeigt, ob diese Arbeit (der Job) jetzt gerade erledigt werden muss. In der Hauptschleife steht dann
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
Um einen Job zur Auführung zu bringen, wird sein Jobflag auf TRUE
gesetzt. Meistens passiert das in einer Interrupt Routine, die zb von
einem Timer angestossen wird. Das muss aber nicht so sein. Im Grunde
kann jeder Code so ein Jobflag auf TRUE setzen.
Wichtig ist, dass kein Job den Prozessor mehr als eine gewisse Zeit
blockieren darf. Warteschleifen sind tabu.
Wenn ein Job tatsächlich mal etwas länger dauern wird, dann muss man ihn
eben auf ein paar Teiljobs aufteilen, wobei dann ein Job den nächsten
aktiviert. Wenn ein Job zwischendurch auf etwas warten muss, dann teilt
man das auf 3 Jobs auf
Job 1: den Teil vor der Warteschleife. Ist der Teil fertig, wird
am Ende der Job 2 mittels Jobflag aktiviert und Job 1
deaktiviert sich.
Job 2: seine Aufgabe ist es, das Ende der Warterei zu erkennen.
Erkennt er es, dann aktiviert er mittels Jobflag den Job 3 und
deaktiviert sich selbst. Ist das Ende der Warterei nicht in Sicht
dann bleibt der Job aktiviert, so dass beim nächsten Durchlauf
durch die while Schleife er wieder zum Zug kommt, und erneut auf
das Ende der Warterei prüft.
Job 3: Alles was nach der Warterei passieren muss.
Das ganze geht dann auch schon in den Bereich der Statemachines hinein
und oft hat nman eine Mischung aus beidem: einer Statemachine
(Zustandsmaschine) und Jobflags.
Gast
#1564826
@Karl heinz Buchegger: Ganz klar: Statemachine ist das Zauberwort...
Siehe Multitasking
Gast
#1564842
@Falk Brunner:
>Siehe Multitasking
Manch einer ist am 21.01.2010 22:05 noch nicht müde, und hat nur Schalk
im Nacken...
@Wilhelm Ferkes (ferkes-willem) >>Siehe Multitasking >Manch einer ist am 21.01.2010 22:05 noch nicht müde, und hat nur Schalk >im Nacken... ????
Falk Brunner schrieb: > Siehe Multitasking Schöne Antwort, kurz und auf den Punkt gebracht. Besonders diese Stelle: http://www.mikrocontroller.net/articles/Multitasking#Verbesserter_Ansatz Peter
Gast
#2695077
Saugeil, danke!!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.