gibt es eigentlich kostenlose C-Bibliotheken Codes oder etwas in der Art, womit man vernünftig Multitasking auf uC realisieren kann? Ich kenne von der FH nur RTKernel[1], aber das kostet 1500 Euro, das ist für privates Experimentieren etwas teuer.
"Markus" schrieb im Newsbeitrag news:443bd753$0$18271$ snipped-for-privacy@newsread2.arcor-online.net...
Vergiss Multitasking, echte paeemtive zeitscheibengesteuerte round robing Prozessverwaltung braucht man praktisch nie, selbst speicherprogrammierbare Steuerungen SPS machen das nicht so.
Verwende lieber den Begriff "ereignisgesteuerte Prozeduren", oder gleich "Interruptroutinen" und du merkst, das jeder uC das schon in Hardware eingebaut hat. Dafuer braucht es kein Betriebssystem.
--
Manfred Winterhoff, reply-to invalid, use mawin at gmx dot net
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
"Markus" schrieb im Newsbeitrag news:443bf209$1$18279$ snipped-for-privacy@newsread2.arcor-online.net...
Fuer kooperatives Multitaksing reichen 2 Funktionen und eine Queue: PostMessage und GetMessage, wie sie bei Windows 16 bit heissen. Und 2 Funktionen mit der von ihnen verwalteten Datenstruktur wirst auch du kaum als Betriebssystem bezeichnen.
Siehste. Vergiss auch kooperatives Multitasking. Interruptgesteuert ist (meistens) der richtige Ansatz, wenn ein uC auf externe Ereignisse reagieren soll. Das Hauptprogramm macht dann zeitunkritisches Zeug in einer Schleife, die Interrupts rufen Funktionen auf die das Ereignis entgegennehmen und (falls es bearbeitet werden muss oder zu Zustandsaenderungen fuehrt) setzt daraufhin ein paar Variablen.
--
Manfred Winterhoff, reply-to invalid, use mawin at gmx dot net
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
Was meinst Du mit "gar keinen extra Code"? Oder vielmehr, was willst Du eigentlich genau machen? Willst Du nur auf externe (oder auch in- terne) Ereignisse zeitnah und unabhaengig von einem wie auch immer gearteten Hauptprogramm reagieren? Dann brauchst Du in der Tat nicht viel "extra Code" sondern musst im wesentlichen nur die Interrupt- vektoren auf die entsprechenden Interrupt-Service-Routinen setzen.
Oder willst Du wirklich verschiedene Programme "gleichzeitig" ab- laufen lassen? In dem Fall kommst Du wohl um das Design eines ge- eigneten Schedulers nicht herum. Bedenke aber, dass aufgrund der oftmals bei uCs nicht vorhandenen Speicherschutzmechanismen ggf. jeder Job in der Lage ist, das Mul- titasking auszuhebeln.
Es ist uebrigens gar nicht mal sooo aufwendig, einen primitiven Scheduler zu schreiben. Sogar praeemptives Multitasking ist nicht die Welt, solange Du Dich aufs Wesentliche beschraenkst (feste Zeitscheiben, feste Reihenfolge der Jobs etc.).
Ereignisgesteuert != Multitasking. Ereignisgesteuert == Zustands- automaten, im Allgemeinen mit explizit mitgeführtem Zustand.
Man sagt auch, Multitasking ist was für Leute, die ihre Anwendung nicht als Zustandsautomat formulieren können. Und zugegebenermaßen ist Multitasking für "Batch"-Verarbeitung sehr bequem.
Kooperatives Multitasking geht auf einem uC auch nicht anders als auf dem PC. Ein paar C-Routinen zur Verwaltung von Task-Kontexten, Synchronisation und so Kram, sowie eine kleine Assembler-Routine zum Stack-Umschalten.
hast du nur an der FH davon gehört, oder auch damit gearbeitet und verstanden wie man in einer Multitaskumgebung programmiert ? Wenn nicht, benutze erst einmal die vorhandene Windows oder Linux API um zu verstehen wie so etwas funktioniert. Lies die Bücher von Tannenbaum und Labrosse (uCos) . Dann schreibst du dir locker selbst dein eigenes Mini-Multitasking für einen beliebigen uController.
ist bislang noch nicht genannt worden. Läuft auf Atmel ATmega, TI MSP430 und verschiedenen ARM uC. Ich habe es einmal auf einem Philips LPC2106 eingesetzt.
Es gibt noch den Ansatz des Polling in alten Lehrb=FCchern. Das ist nur im Testsystem und in CPU's ohne Interrupt sinvoll.
Hier werden die Ger=E4te der Reihe nach abgefragt, ob sie Daten zur Verarbeitung haben. Zum Testaufbau finde ich die Anordnung sinvoll, da hier der Funktion einfach Daten =FCbergeben werden k=F6nnen, ohne dass ein Interrupt ausgel=F6st werden muss. Au=DFerdem ist ein ein solches Programm einfacher zu schreiben, da der Prozessor sich immer in einer stabilen Phase befindet und keine zeitkritischen Prozesse unterbrochen werden k=F6nnen. Wenn es mit Polling l=E4uft, so l=E4sst sich mit ein wenig Aufwand der Aufbau meist auch in Interrupt umbauen. (Interruptleitungen verbinden, bei zeitkrischen Funktionen den Interrupt sperren und Stabilit=E4ts=FCberpr=FCfungs- funktionen einbauen).
Einige hier finden Polling f=FCr einfache Steuerungen v=F6llig ausreichend. (und die befassen sich beruflich mit Elektronik im Gegensatz zu mir)
Bei Interruptbasierten Programmen befindet sich im Hauptprogramm ein Startcode und dann nur noch eine Sleep-Schleife [Windows-Programme verwenden einen =E4hnlichen Mechanismus, wenn sie auf Benutzereingaben warten].
Dann versuchen 5 Philosophen mit 5 Gabeln an einem rundem Tisch Spagetti zu essen! So einfach ist es doch nicht.
Dem Linux-Kernel l=E4sst sich einiges abschauen. Der implementiert sogar 3 verschiedene Modelle.
(f=FCr alle die das Bsp. nicht kennen: 1. Alle Philosphen heben gleichzeitig eine Gabel hoch. 2. Sie stellen fest, dass sie keine 2. Gabel haben. 3. Sie legen die Gabeln wieder hin. 4. Sie beginnen erneut bei 1. ) [Bsp. stammt in groben Z=FCgen aus einem Turbopascal Buch, ich kann mir gut vorstellen, dass die Berufsgruppe durch andere ersetzt wird (Basic-Programmierer, Mathematiker, Datensch=FCtzer, Windows-Nutzer, .=2E.)]
Im Idealfall klapt das mit der festen Zeitscheibe aber irgendwann wird die Anwengung erweitert und es treten diese Konkurrenzprobleme auf. (ich finde den Ansatz von Linux gut und er sieht recht einfach aus und die Umsetzung ist auch nicht die Welt)
Nope. Das Ganze ist sogar bekannt unter dem Namen "Philosophenproblem".
Nur, wenn man IPC braucht. Wenns aber nur darum geht, einzelne voneinander unabhaengige Jobs laufen zu lassen, dann gibts i.d.R. keinerlei Probleme diesbezueglich.
"nicht die Welt" ist ein bisserl untertrieben. Der Linux-Scheduler besteht aus mehr als aus nur kernel/sched.c... Nichtsdestotrotz ist es nicht schwer fuer nen uC (bei dem man norma- lerweise genau weiss, was er zu tun hat) praeemptives Multitasking zu implementieren. Wenn man aber versucht, die Eier legende Woll- milchsau zu schaffen, dann ists genauso schwer wie fuer einem "rich- tigen" Computer.
Gute Frage. Gibts denn eine "offizielle" Definition von "uC"? Persoenlich wuerde ich sagen alles, was "mehr" ist als nur eine reine CPU (insb. z.B. Buscontroller on chip hat). Oder man definierts ueber das Anwendungsgebiet. Dann waere aber ggf. auch ein Pentium ein uC, wenn er nicht in einem Computer steckt son- dern irgendwoanders "reine Kontrollaufgaben" uebernimmt.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.