www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Effizientes Programmieren mit Mikrocontroller


Autor: Andre S. (andre008)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Zacc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. Gibt es. Willkommen in der Realitaet. Die Technologie heisst 
Realtime programmierung. (Echtzeit) Viel Glueck mit Gurgel

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
int main()
{
  ...

  while( 1 ) {

    if( Job1_Needs_to_be_done ) {
      perform Job1;
      Job1_Needs_to_be_done = FALSE;
    }
 
    if( Job2_Needs_to_be_done ) {
      perform Job2;
      Job2_Needs_to_be_done = FALSE;
    }

    ...

    if( Jobn_Needs_to_be_done ) {
      perform Jobn;
      Jobn_Needs_to_be_done = FALSE;
    }
  }
}

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.

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl heinz Buchegger:

Ganz klar: Statemachine ist das Zauberwort...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Multitasking

Autor: Wilhelm F. (ferkes-willem)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk Brunner:

>Siehe Multitasking

Manch einer ist am 21.01.2010 22:05 noch nicht müde, und hat nur Schalk 
im Nacken...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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...

????

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner schrieb:
> Siehe Multitasking

Schöne Antwort, kurz und auf den Punkt gebracht.

Besonders diese Stelle:

http://www.mikrocontroller.net/articles/Multitaski...


Peter

Autor: EGS_TI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Saugeil, danke!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.