Hallo,
ich benutze für ein Studienprojekt den MSP4305438. Ich möchte für das
Projekt ein Echtzeitbetriebssystem einsetzen. Das ganze sollte aber
keine Lizensgebüren kosten. Ich habe bereits einige erfahrungen mit dem
RTOS µC/OS 2 von Micrium. Das fällt wohl leider wegen den Gebühren aus.
Aber es gibt ja unzählige Alternativen.
Ich habe hier 2 gefunden die für mich interessant aus sehen.
Das sind von TI SYS/BIOS und free RTOS.
Beide scheinen kostenlos nutzbar zu sein.
Meine Anforderungen sind eigentlich lachhaft, ich brauche:
- Nutzung von Interrupts für Serielle Schnittstellen
- Priorisierung der Tasks
- Präemtives Multitasking
- Binäry Semaphore
- Shared Memory (notfalls über globale Variablen)
Weiterhin wünschenswert:
- später vielseitig einsetzbar (spricht eher für freeRTOS) damit ich das
gelernte weiter verwenden kann
- möglichst einfach anzuwenden
- und es sollte nicht allzu ressourcenhungrig sein
Das Projekt wird recht umfangreich, Hauptaufgaben sind: FAT-Dateisystem
(SD-Card), Daten der seriellen Schnittstelle auswerten.
Was ich gerne Wissen würde ist:
-Hat jemand erfahrungen mit den genannten und kann mir eine Empfehlung
geben?
-Gibt es stolpersteine auf die ich unbedingt aufpassen sollte (wenn ja
welche)?
-Habe ich eine wichtige alternative übersehen?
Danke für Antworten und Anregungen.
Student schrieb:> - Shared Memory (notfalls über globale Variablen)
Shared memory braucht man nur dann, wenn es überhaupt eine virtuelle
Speicherverwaltung gibt, die in der Lage ist, die Adressräume von Tasks
voneinander zu isolieren. Für eine virtuelle Speicherverwaltung braucht
man eine MMU. Hat der MSP430 eine? Wohl kaum.
> Das Projekt wird recht umfangreich, Hauptaufgaben sind: FAT-Dateisystem> (SD-Card), Daten der seriellen Schnittstelle auswerten.
Das ist doch mehr oder weniger unkritischer Kinderkram. Dazu allein
braucht man ganz sicher kein ausgewachsenes RTOS. Natürlich kann man das
auch unter einem RTOS implementieren, aber der Overhead steht in keinem
Verhältnis zum Nutzen der Sache.
Ein RTOS ist dann sinnvoll, wenn man eine Vielzahl von weitgehend
unabhängig laufenden Tasks und Ereignisquellen hat bzw. haben will.
Deine Beschreibung läßt davon nichts erkennen.
Hallo,
danke für die Antworten. Embedded-OS wäre vlt. noch eine möglichkeit.
Ich sehe aber keinen Vorteil gegenüber freeRTOS oder dem von TI.
Was die anforderungen angeht hab ich mich unklar ausgedrückt. Es ist
natürlich deutlich mehr als das. Es ist nicht wie oben (schlecht
formuliert) steht eine, sondern es sind min. 3.
Zusätzlich kommt noch die Datenauswertung und speicherung in einen Task
und noch eine ganze Menge mehr. Das hätte ich schreiben können.
Natürlich geht das auch ohne RTOS aber der Verwaltungsaufwand wäre groß
zumal ich dann selbst eine Art Multitasking schreiben müsste (ich habe
einige Tasks drin die längere Pausen ((>= 10ms) machen müssen).
Die Formulierung SD-Karte und Serielle Schnittstelle ist schlecht
gewesen. Ich gebs zu.
Was die SharedMemory angeht: ich habe natürlich keine MMU, jedoch
brauche ich dynamischen Speicher. Bei µC/OS-2 gibt es hier memory
partitions. Das ist eine Memorypartition (eigentlich nur eine globale
variable) von der man "ein stück" anfordern kann. Wenn was frei ist
bekommt man es, wenn nicht wird der Task Schlafen gelegt bis etwas frei
ist. Der letzte Punkt ist der entscheidende. Mit Globalen Variablen
müsste ich mich da selbst drum kümmern das immer was frei ist.
Blackbird schrieb:> RTOS heißt noch lange nicht "schnell".> So wie Du es aufziehen willst, wird es eher langsam.
Deswegen heisst es ja auch "Echtzeitbetriebssystem", weil dann alles
echt Zeit braucht ;)
Hallo nochmal,
von schnell hatte ich auch nichts geschrieben. Was ich geschrieben hatte
war: "nicht allzu ressourcenhungrig".
Das eine Betriebssystemlösung viel langsamer als eine manuelle ist ist
absolut logisch. Geschwindigkeit ist aber auch nicht das entscheidende
Kriterium. Rechtzeitigkeit ist es :)
Datenspeicherung, -auswertung, SD-Card-Schreiben, ...
nirgendwo sind echtzeitfähige Anforderungen zu finden.
Die wären erst gegeben, wenn Du auf ein externes Ereignis in einer
bestimmten, immer gleichen, Zeit antworten mußt.
Davon hast Du nichts geschrieben.
Es sieht mir eher nach exzessiver C++ Programmiererei aus,
UML-generiert.
Die paar Anwendungen kann man auch interruptgesteuert abarbeiten.
Mit einem RTOS geht es auch, aber der Aufwand ...
Blackbird
Student schrieb:> Natürlich geht das auch ohne RTOS aber der Verwaltungsaufwand wäre groß> zumal ich dann selbst eine Art Multitasking schreiben müsste (ich habe> einige Tasks drin die längere Pausen ((>= 10ms) machen müssen).
So what? Sowas macht man mit einem "Timer-Device". Alle µC (natürlich
auch MSP430) haben Timer dafür.
Und klar: Der "Verwaltungsaufwand" ist bei sowas größer, als wenn man
nur in main() eine LED blinken läßt und die Blinkfrequenz per delay()
steuert.
Aber RTOS haben den "Verwaltungsaufwand" natürlich genauso und leider
auch noch viel mehr. Weil deine eigene Verwaltung dem Einsatzzweck
angepaßt sein und deswegen minimal sein kann, das RTOS aber universell
und deswegen vergleichsweise fett und langsam sein muß.
> Was die SharedMemory angeht: ich habe natürlich keine MMU, jedoch> brauche ich dynamischen Speicher.
Was mit SharedMemory rein garnix zu tun hat...
> von der man "ein stück" anfordern kann. Wenn was frei ist> bekommt man es, wenn nicht wird der Task Schlafen gelegt bis etwas frei> ist.
Das kann dann schonmal kein Echtzeit-Task sein. Das ist dir doch
hoffentlich klar? Jedenfalls sollte dir das klar sein, sonst brauchst du
mit der Sache erst garnicht anfangen und solltest statt dessen besser
eine Ehrenrunde einlegen, in der du mindestens das aktuelle Semester
noch einmal machst...
c-hater schrieb:>> von der man "ein stück" anfordern kann. Wenn was frei ist>> bekommt man es, wenn nicht wird der Task Schlafen gelegt bis etwas frei>> ist.>> Das kann dann schonmal kein Echtzeit-Task sein. Das ist dir doch> hoffentlich klar? Jedenfalls sollte dir das klar sein, sonst brauchst du> mit der Sache erst garnicht anfangen und solltest statt dessen besser> eine Ehrenrunde einlegen, in der du mindestens das aktuelle Semester> noch einmal machst...
Doch das kann ein Echtzeittask sein wenn ich sicherstellen kann das
rechtzeitig speicher frei wird.
c-hater schrieb:>> Was die SharedMemory angeht: ich habe natürlich keine MMU, jedoch>> brauche ich dynamischen Speicher.>> Was mit SharedMemory rein garnix zu tun hat...
Wikipedia sagt dazu:
Shared Memory (dt. „gemeinsam genutzter Speicher“) wird in der
Computertechnologie verwendet und kann dabei je nach Kontext eine andere
Technologie beschreiben:
Shared Memory in der Interprozesskommunikation (IPC): Hier nutzen zwei
oder mehrere Prozesse einen bestimmten Teil des Hintergrundspeichers
(RAM) gemeinsam.
Genau das ist das was ich brauche. Das ich mir Dynamisch den speicher
besorge ist natürlich mit drin.
Mit dem Blinken einer LED hat das ganze auch wenig zutun. Da ich ständig
mehrere Sensoren auswerte (gut die hatte ich bisher nicht erwähnt, es
gibt einen ganzen haufen von aufgaben die da noch parallel laufen müssen
aber relativ schnell gehen und zeitlich unabhängig sind).
Die Frage war aber auch nicht ist ein Echtzeitbetriebssystem geeignet,
sondern was sind die Besonderheiten der beiden genannten
Echtzeitbetriebssysteme.
Dennoch danke für eure Antworten.
@c-hater (Gast)
lass ihn, er will unbedingt eine Taschenuhr mit Fäustlingen an den
Händen bauen ;)
Die einzige Rechtfertigung für sein Vorhaben könnte sein - er weiß noch
nicht so genau, was er alles in das Projekt packen will. Und hält sich
so alle Optionen für Erweiterungen offen (die er aber nicht vornehmen
wird, sondern ein neue Projekt beginnt ...).
Und wie ich schon schrieb: Seine Vorkenntnisse sind wahrscheinlich nur
UML mit C++. Da schreit förmlich nach einem Betriebssystem. Dass das ein
µC ganz anders kann - das lernt er noch wenn er erst mal das Projekt
beginnt.
Blackbird
PS:
@Student (Gast)
Als RTOS würde ich immer ein pSOS/pSOS+ -Derivat nehmen. Diese Topologie
hat sich schon auf den verschiedensten Plattformen bewährt und läuft
sogar heute noch - das sind meine Berufserfahrungen. Verlange jetzt aber
nicht die wasserdichte Begründung, das wäre eine längere Abhandlung mit
viel Recherche.
Fange einfach mal mit einer zeitgesteuerten Sensorabfrage an. Ohne RTOS,
nur mit µC-Bordmitteln.