Ahogyan növeljük az adott mikrokontroller sebességét, a rajta futó alkalmazásunk bonyolultsága úgy csökken, ha nem használunk a mikrovezérlőn futó operációs rendszert. Ezért a fejlesztők bizonyos működési sebességnél (és bonyolultságnál) már valamilyen operációs rendszer használata mellett döntenek. Az egyik lehetséges választás a FreeRTOS.
Ahhoz, hogy a FreeRTOS-t megismerjük, szükséges először átnéznük az operációs rendszerek alapjait, azután a következő cikkben a FreeRTOS néhány tulajdonságát tekintjük át, hogy ezt követően a közölt példák érthetők legyenek. Nem törekszünk az operációs rendszer tulajdonságainak a részletes ismertetésére, célunk az alapfogalmak tisztázása.
A kernel intézi a task-ok (folyamatok) meghívását, menedzselését. A taszkok egymást nem "zavarják", viszont a folyamatok futtatásához operációs rendszer kell. Ilyen operációs rendszer például a FreeRTOS.
Az ütemező feladata a processzor "odaadása" a futásra kész task-ok egyikének. A task-okat általában sorokban tároljuk. Minden task-nak van prioritása, ennek segítségével dönti el az ütemező, hogy ki kapja meg a futási jogot. Ez a prioritás változhat dinamikusan, sőt le is kérhető. Előfordulhat, hogy a két tasknak a prioritása megegyezik, ekkor az ütemezőtől egyforma időt kapva egymás után kapnak futási jogot (feltéve, ha más task-nak nem lesz nagyobb a prioritása).
A prioritásos ütemezők nem fair-ek, hiszen előfordulhatnak kiéheztetések is.
Érdemes itt megjegyezni azt, hogy mi történik akkor, amikor nincs olyan task, amely futhat. Tehát mi fut, ha semmi sem futhat? Ekkor ún. "Idle" fut, amely különböző feladatokat takarhat. Ilyen lehet például valamilyen háttérfolyamat, amelynek alacsony a prioritása. Látni fogjuk a FreeRTOS-nál, hogy erre a célra van a void vApplicationIdleHook(void).
Ez az operációs rendszer nyílt forráskódú, "C" nyelven készült. Alapvetően 16 és 32 bites mikrovezérlőknél használható, de megkötésekkel PIC18F családon is alkalmazható. De természetesen nem csak a Microchip által gyártott mikrovezérlőkön használható ez az operációs rendszer, hanem az ARM-októl kezdve a Cortex-eken át a MicroBlaze-en keresztül az NiosII-ig elég nagy a felhasználható architektúrák száma.
Fontos megjegyezni, hogy a fejlesztő kódjával együtt fordul le hex file-ba az operációs rendszer. A FreeRTOS a következő file-okból áll :
Ha letöltjük a FreeRTOS aktuális verzióját, a kicsomagolás után különböző alkönyvtárakban találjuk meg az adott mikrovezérlőre elkészített demot. A PIC32MX_MPLAB könyvtárban található demoprojektnek a felépítését mutatja a következő ábra.
1. ábra FreeRTOS projekt felépítése PIC32 mikrovezérlőnél
A Source Files mappában nincs minden file-ra szükségünk, és a később közölt példáknál is új main.c-t fogunk készíteni. Érdemes megjegyezni még azt is, hogy a függvények nevei mindig a visszatérési értékkel kezdődnek.
példa : vTaskDelete() : void-ot ad vissza (töröljük az adott task-ot)
A FreeRTOS-nál is egyszerre csak egy szál futhat, azaz, egy szál vagy fut, vagy nem fut állapotban van (2. ábra). A nem fut állapot több részre is bontható, erről később.
2. ábra Fut, nem fut állapotok (Nicolas Melot, Study of an operating system: FreeRTOS)
Egyszerre tehát csak egy szál futhat, ez mutatja meg a 3. ábra.
3. ábra Taskok futása, állapotváltások (Richard Barry, FreeRTOS Manual, 2003-2005)
Először az első task (Task1) kap futási jogot (1. állapot), a második állapotban a kernel felfüggeszti a Task1 futását, de a másik task (Task2) még nem kap jogot a futásra. A 2. és a 3. állapot között adminisztrációs idő lép fel. A 3. állapotban a kernel elindítja a Task2-t és ez a szál fut a 4. állapotban.
Különbség van azonban a nem futó szálak állapotai között. Megkülönböztetünk futásra kész szálat (futna, de nem elég nagy a prioritása), felfüggesztett szálat (nem versenyez a futási jogért), illetve blokkolt szálat is (4. ábra).
4. ábra Lehetséges állapotok (Nicolas Melot, Study of an operating system: FreeRTOS)
Folytatjuk sorozatunkat pár nap múlva a szálak létrehozásával, menedzselésével.
Hát igen.... Elérkeztünk a 100. cikkhez. Köszönjük az érdeklődést, a visszajelzéseket. Ezért valami érdekessel, nem annyira ismert témával ünnepeljük ezt a kerek fordulót. A választás a FreeRTOS-ra, egy valósidejű operációs rendszerre esett. Ezt a be. . . .
Folytatjuk tovább a FreeRTOS megismerését, de most a száraz elméletet félretéve, összeállítjuk az első projektünket.. . . .
Megismerkedünk most gyakorlati oldalról az USB-CDC használatával. Készítünk egy projektet az MpLab segítségével, amelynek segítségével LED-eket kapcsolunk be, illetve ki, de megnézzük azt is, hogy hogyan tudunk a mikrovezérlőből beolvasni string-et.. . . .