Forum: Mikrocontroller und Digitale Elektronik Noch ein RTOS


von Matthias G. (matthias1102)


Lesenswert?

Ich schlage mich gerade mit einem STM32F401 herum und probiere so 
einiges aus. Unter Anderem Habe ich ein RTOS gesucht, dass auf 
verschiedenen Contollern einfach zum Laufen zu bringen ist. Nun gibt es 
reichlich RTOS-Ports für zahlreiche Controller, selten aber, ein RTOS 
das sowohl auf einem Renesas als auch auf einem STM läuft. Ich könnte 
zwar ein RTOS für den STM nehmen und das auf den Renesas portieren, aber 
das ist mehr oder weniger zeitaufwändig, meist müssen ja iwelche 
spezifischen Eigenheiten der Controller angepasst werden und das oftmals 
auch noch in Assembler.
Nach stundenlangem Suchen im WWW bin ich dann über ein in C 
geschriebenes RTOS gestolpert.

http://www.raffia.ch/?RTOS_MiniOS

Damit es ans Laufen kommt ist lediglich ein Timertick erforderlich in 
dem eine OS-Spezifische Routine aufgerufen wird.
Zum eigenen Projekt müssen dann noch die runtergeladenen Header- und 
Sourcedateien hinzugefügt werden. Das war's. Ich habe etwa 1h gebraucht, 
bis ich begriffen habe was nötig ist und ich eine fehlerfreie 
Kompilation erhielt.
Meine ermittelten Daten:
Controller STM32F401RC, Sysclock (Core-Frequenz) 144MHz.
2 Tasks werden aufgerufen. Die eine setzt einen Portpin auf High, die 
andere auf Low:
1
//-----------------------------------------------------------------------
2
void Task0(void)
3
{
4
    while (1)   // Task Endlos-Loop
5
    {
6
        SCHEDULE(); // Switch zum Kernel
7
        g_LEDPC5Off();
8
    } // no Return
9
}
10
//----------------------------------------------------------------------
11
void Task1(void)
12
{
13
    while (1)  // Task Endlos-Loop
14
    {
15
        SCHEDULE(); // Switch zum Kernel
16
        g_LEDPC5On();
17
    } // no Return
18
}
19
//----------------------------------------------------------------------
20
int main(void)
21
{
22
    InitSystem();   //Clock, Ports usw.
23
    while(1)
24
    {
25
        OS_Execute();
26
        OS_Schedule();
27
        if (ERROR == ERR_ISR_NOTIFY || ERROR == ERR_ISR_SEMOVFL) 
28
        {
29
             while (1);        // stop if error in ISR
30
        }
31
    }
32
}
33
//----------------------------------------------------------------------
Mit dem Scope habe ich 3,7µs Low-Time und 3,7µs High-Time ermittelt. Ich 
kann also interpretieren, das ein Taskwechsel rund 3,7µs dauert.
Für meine Anwendungen schnell genug, immerhin bleiben bei einem 
"OS_Timer_Tick" von 1000µs noch 996µs für die eigentliche Arbeit übrig.
Wie gut und stabil das OS läuft kann ich noch nicht sagen. Ich spiele 
jetzt erstmal mit den Smaphoren und Mailboxen rum.
So, das wars. Viel Spaß euch allen.
Matthias

: Bearbeitet durch User
von Random .. (thorstendb) Benutzerseite


Lesenswert?

> ist lediglich ein Timertick erforderlich
SysTick ...

von Jan S. (jevermeister)


Lesenswert?

http://www.chibios.org mal angeschaut?

von Matthias G. (matthias1102)


Lesenswert?

Random ... schrieb:
>> ist lediglich ein Timertick erforderlich
> SysTick ...

Ja, ja, im Quellcode heisst er aber "OS_Timer_Tick"....

von Matthias G. (matthias1102)


Lesenswert?

Jan S. schrieb:
> http://www.chibios.org mal angeschaut?

Nur oberflächlich. Scheint mir aber so, dass da auch ein erheblicher 
Aufwand erforderlich ist um das RTOS zu portieren und das wollte ich 
eben vermeiden.

von Experte (Gast)


Lesenswert?

FreeRtos

von foo (Gast)


Lesenswert?


von Jan S. (jevermeister)


Lesenswert?

Matthias G. schrieb:
> Jan S. schrieb:
>> http://www.chibios.org mal angeschaut?
>
> Nur oberflächlich. Scheint mir aber so, dass da auch ein erheblicher
> Aufwand erforderlich ist um das RTOS zu portieren und das wollte ich
> eben vermeiden.

Ich weiß nicht welchen Renesas du verwenden möchtest. Ich habe ChibiOS 
erwähnt, weil es für so ziemlich alle STM eine Portierung gibt sowie 
eine experimentelle für den RX62N: 
http://svn.code.sf.net/p/chibios/svn/branches/rx_dev/

: Bearbeitet durch User
von Georg G. (df2au)


Lesenswert?

Angeregt durch deinen Beitrag habe ich mir Mini-OS mal geholt und 
versucht, es auf einen ATMega zu portieren. Wenn man dem Compiler 
jegliche Optimierung verbietet, sind rudimentäre Funktionen machbar. 
Ansonsten crasht es sofort. Und nach einem kurzen Blick in den 
Quelltext, wird auch klar, warum das so sein muss. Und dann versteht man 
auch den Hinweis im Handbuch, dass nach einem Taskwechsel lokale 
Variable im Eimer sind und auch der Stack etwas anders ist.

Fazit: Ab in die Tonne damit.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Hi Georg - "dass nach einem Taskwechsel lokale
Variable im Eimer sind und auch der Stack etwas anders ist" <- hast Du 
da mal eine Textstelle zu? Das steht da echt so drin? facepalm

Von CoOs habe ich schon Gutes gehört.

Dann gibt es noch die "mountaineer gadgeteer", die Dir einen Hauch von 
.net auf den Controller bringt.

von Jan S. (jevermeister)


Lesenswert?

Für ChibiOS existiert bereits ein ATMega-Port und der funktioniert auch 
recht gut. Ich habe selber noch nichts dafür portiert aber privat 
ChibiOS ohne nennenswerte Probleme auch für komplexe Dinge genutzt.

von Georg G. (df2au)


Lesenswert?

Marcus H. schrieb:
> eine Textstelle

Handbuch, Seite 7, "Wichtige Hinweise"
Lokale Task-Variablen und Rücksprungadressen bleiben nach einem Kontext-
Switch nicht erhalten.

Ich habe zuerst drüber hinweg gelesen, wer rechnet auch mit solchen 
Einschränkungen. Nochmals, ganz langsam geschrieben: Im Taskwechsel 
werden keine Register gerettet. Unglaublich...

FreeRTOS habe ich mittlerweile auch mal probiert. Ein Wust an Files und 
Verzeichnissen, unübersichtlich. Und der vorhandene Port für den 
ATMega128 passt nicht zum aktuellen System. Unter anderem wurden Namen 
von Systemvariablen munter geändert. Viel Arbeit, um den ersten Schritt 
machen zu können.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Ah, ok, danke. Das dient der Effizienz. Durch das "kooperative 
Taskswitching" darf ein Prozess wohl selbst entscheiden, welche 
Informationen er sich merkt. Unterscheidet sich doch marginal von 
Linux...

: Bearbeitet durch User
von Martin (Gast)


Lesenswert?

Schon  8 Jahre alt das Zeug.
Also nicht gepflegt.

Schade  dass im Internet  soviel altes Geraffel herumfliegt
dass endlich mal gelöscht gehörte.

Eigentlich erstaunlich dass Linux  nicht auch diesen Weg gegangen ist.

von Mehmet K. (mkmk)


Lesenswert?

@Georg
Schau Dir mal scmrtos an: http://scmrtos.sourceforge.net/ScmRTOS
Sehr schlank, sehr einfach gehalten. Man hat sofort ein Aha-Erlebnis.

Habe damit sehr lange gearbeitet (MCU war ein STM32F4; aber es gibt auch 
ein AVR-Port). Keinerlei Probleme.
Aber da es seit 2 Jahren auch dort Funktstille herrscht, habe ich 
vorsichtshalber auf ChibiOS umgesattelt (wobei ich dort nur das RTOS 
(ohne das HAL) benutze).

von xios (Gast)


Lesenswert?

Heute habe ich Chibios auf mein STM32F401 portiert. Für IDE mit Eclipse 
und GCC ca. 2 Std.

von xios (Gast)


Lesenswert?

Matthias G. schrieb:
> Nur oberflächlich. Scheint mir aber so, dass da auch ein erheblicher
> Aufwand erforderlich ist um das RTOS zu portieren und das wollte ich
> eben vermeiden.

Heute habe ich Chibios auf mein STM32F401 portiert. Für IDE mit Eclipse
und GCC ca. 2 Std.

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.