mikrocontroller.net

Forum: Compiler & IDEs Thread-Programmierung?


Autor: TT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

weiß zufällig jemand ob man Mikrocontroller der ATmega-Reihe mit Threads 
programmieren kann? also so das zwei sachen wirklich parallel zu 
einander laufen.
und wenn ja, wie würde ein solche Programm aussehen?

wäre cool wenn es da einen Beispiel Code oder so gäbe...

MFG
TT

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist denn "wirklich Parallel"?
Mit einem Kern dürfte das wohl unmöglich sein.

Vielleicht reicht Dir aber auch sowas: http://www.sics.se/~adam/pt/

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wirklich parallel

Nein. Wirklich parallel geht nur mit parallelen Prozessoren, oder mit 
SMT wie in Power5,Pentium4.

Pseudo-Parallel, d.h. preemtive multitasking, das geht jedoch. 
Stichwort: RTOS. Beispielcode findet sich beim jeweiligen RTOS (z.B. 
http://barello.net/avrx/).

Autor: TT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke erst mal,

das es natürlich nicht 100% parallel läuft ist klar, das kann logischer 
weise nur mit zwei prozessor gehen.
die seiten oben sehen viel versprechend aus, aber gibts das zufällig 
auch in C? Assembler ist nicht wirklich meine stärker....

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AvrX ist zwar in Assembler geschrieben, der API jedoch ist für 
GCC/WinAVR gedacht. Ada Dunkels Protothreads ebenso. Also wie kommst du 
auf Assembler?

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

Bewertung
0 lesenswert
nicht lesenswert
TT wrote:
> danke erst mal,
>
> das es natürlich nicht 100% parallel läuft ist klar, das kann logischer
> weise nur mit zwei prozessor gehen.
> die seiten oben sehen viel versprechend aus, aber gibts das zufällig
> auch in C? Assembler ist nicht wirklich meine stärker....

Zäumen wir das Pferd doch mal von der anderen Seite auf:
Wie lautet deine Problemstellung, bei der du denkst dass
du parallele Verarbeitung benötigst.
Viele Problemstellungen kann man mit einem Pseudomultitasking
durch den Einsatz einer Haupt-while Schleife und Job-Flags
in den Griff kriegen. Grundprinzip: Alle Arbeitseinheiten
sollten so kurz wie möglich und so schnell wie möglich ablaufen.
Dafür sieht der µC ständig nach, ob es irgendwo etwas zu tun
gibt, führt diesen kurzen Job aus und ist danach gleich wieder
auf der Suche nach Arbeit.

Autor: TT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Problemstellung ist folgende:
der Inhalt eines Datenfeldes wirde über ein selbst entwickeltes 
LED-Display ausgegeben, zeitgleich soll ein zweites Datenfeld mit neuen 
Daten beladen werden. Ist die Beladung des zweiten Feldes fertig, sollen 
die Felder wechseln, sprich Feld zwei wird angezeigt, und Feld eins 
beladen.
Problem ist dass die anzeige immer aktiv sein soll, sprich die 
Unterbrechungen müssen sehr klein sein so dass sie dem menschlichen Auge 
nicht auffallen und die Daten für das zubeladende Feld kommen nicht 
regelmässig, bzw der zeitliche Abstand zwischen den einzelnen Bytes 
variert.

Des wegen dachte ich es ist vielleicht so was wie in Java möglich, dass 
man sagt ein Thread kümmert sich um die Anzeige, ein Anderer um die 
Beladung des Feldes.


Und wie ich auf Assembler kommen?  jetzt nach dem ich mir die Seiten 
noch mal angeschaut habe ( konnte gestern leider nur super kurz einen 
Blick drauf werfen) frag ich mich das auch... keine Ahnung was ich mir 
da gedacht hab  oder was sich da bei mir eingeprägt hat, weil C und 
Assembler sehen sich ja eigentlich nicht mal ansatzweise von der Form 
her ähnlich....

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@TT

>der Inhalt eines Datenfeldes wirde über ein selbst entwickeltes
>LED-Display ausgegeben, zeitgleich soll ein zweites Datenfeld mit neuen

>Des wegen dachte ich es ist vielleicht so was wie in Java möglich, dass
>man sagt ein Thread kümmert sich um die Anzeige, ein Anderer um die
>Beladung des Feldes.

;-)
Und dafür brauchst du Threads? Das macht jeder uC spielend mit einfacher 
Interruptsteuerung.
Da muss nix "wirklich parallel" laufen, von zwei Prozessoren ganz zu 
schweigen.
Nimm nen AVR+ WinAVR (C Compiler) und fertig.

MfG
Falk

P.S. Warum glaubt jeder, der mal 3 Zeilen Java verbrochen hat, was von 
Programmierung zu verstehen? ;-)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> sehr klein sein so dass sie dem menschlichen Auge
> nicht auffallen

;-)

Für einen Controller beginnt der Stress erst dann wenn man in einer
oder zwei Mikrosekunden regelmäßig was erledigt haben muss.

Was du schreibst, hat gut und gern 50 Millisekunden Zeit, da kann
sich der Controller dazwischen getrost noch schlafen legen und seinen
Betriebsstrom sparen.

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

Bewertung
0 lesenswert
nicht lesenswert
> Problem ist dass die anzeige immer aktiv sein soll, sprich die
> Unterbrechungen müssen sehr klein sein so dass sie dem menschlichen
> Auge nicht auffallen

Wie ist die Anzeige aufgebaut?
Ich geh mal davon aus, dass da ein Multiplex gemacht
wird. Welche Timing Grenzen hast du?
Wie aufändig ist ein Update der Anzeige?

> und die Daten für das zubeladende Feld kommen nicht
> regelmässig, bzw der zeitliche Abstand zwischen den einzelnen Bytes
> variert.

Auch hier: nenn mal ein paar Zahlen. Wie gross sind die
zeitlichen Abstände: von - bis?


Alles in allem klingt das nach einer 08/15 Anwendung,
bei der der Anzeigenupdate in einem Interrupt gemacht
wird, in der Hauptschleife kümmert sich der µC um
die Datenannahme und in der restlichen Zeit löst er
teuflisch schwierige quadratische Gleichungen, damit
ihm nicht fad wird.

Autor: TT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mmmh stimmt mit interrupts müsste des problemlos gehen... warum hab ich 
selbst daran noch nicht gedacht?


@Falk, nur weil ich mal ein bissle was mit Java gemacht hab denke ich 
net das ich programmieren kann, aber ich denke mal man muss ja sein 
ganzes Wissen was man in einer Programmiersprache hat nicht über Board 
werfen, nur weil man jetzt noch was mit einer Anderen macht, den ein 
paar Sachen sind ja meisten/ manchmal/ vielleicht/ womöglich ähnlich.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TT wrote:
> Die Problemstellung ist folgende:
> der Inhalt eines Datenfeldes wirde über ein selbst entwickeltes
> LED-Display ausgegeben

Ich vermute mal, das Display arbeitet im Multiplexbetrieb, d.h. die 
Zeilen und Spalten müssen mit einer bestimmten Wiederholfrequenz 
(>100Hz) ausgegeben werden.

Sowas muß man im Timerinterrupt machen.

Anders kriegst Du nämlich kein konstantes Zeitraster hin und die Pixel 
würden dann unterschiedlich hell leuchten.

Und das Main muß dann nur noch die neuen Daten im SRAM ablegen und ein 
Flag setzen, damit der Timerinterrupt die Seite umschalten kann.


Peter


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.