Forum: Mikrocontroller und Digitale Elektronik RTOS für MSP430


von Student (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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.

von Arne (Gast)


Lesenswert?


von Student (Gast)


Lesenswert?

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.

von Blackbird (Gast)


Lesenswert?

RTOS heißt noch lange nicht "schnell".
So wie Du es aufziehen willst, wird es eher langsam.

Blackbird

von temp (Gast)


Lesenswert?

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 ;)

von THaala (Gast)


Lesenswert?

Schau mal bei ChibiOs vorbei:

http://www.chibios.org/dokuwiki/doku.php?id=chibios:matrix

Gruß Thilo

von Student (Gast)


Lesenswert?

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 :)

von Blackbird (Gast)


Lesenswert?

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

von c-hater (Gast)


Lesenswert?

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...

von Student (Gast)


Lesenswert?

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.

von Blackbird (Gast)


Lesenswert?

@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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.