# Micro-Controller Operating Systems

Un sistema operatiu per microcontrolador (MicroC / OS, estilitzat com µC/OS) és un sistema operatiu en temps real (RTOS) dissenyat pel desenvolupador de programari encastat, Jean J. Labrosse en 1991. Són sistemes escrits majoritàriament en el llenguatge de programació C. Està destinat per al seu ús en sistemes encastats.
MicroC / OS permet definir diverses funcions en C, cadascun dels quals pot executar com un fil independent o tasca. Cada tasca s'executa amb una prioritat diferent, i s'executa com si posseeix la CPU. Tasques de prioritat més es pot interrompre per les tasques de major prioritat en qualsevol moment. Tasques de major prioritat utilitzen els serveis del sistema operatiu (per exemple, un retard o esdeveniment) per permetre tasques de menor prioritat per executar. Hi ha serveis del sistema d'accionament disposats per a la gestió de tasques, la comunicació entre tasques, gestió de memòria, i per mesurar el temps.

## Història

El nucli/OS MicroC va ser originalment publicat en un article de tres parts en la revista "Embedded Systems Programming magazine" i el llibre µC/OS The Real-Time Kernel de Jean J. Labrosse (ISBN 0-87930-444-8). L'autor es va proposar al principi simplement descriure el funcionament intern d'un sistema operatiu portàtil que havia desenvolupat per al seu propi ús, però més tard va desenvolupar el sistema operatiu com un producte comercial a les versions II i III.

## L'escriptura d'aplicacions sota μC/OS

Les tasques que s'executen sota un nucli multi tasca han d'estar escrites en una de dues maneres:
1. Un bucle sense fi sense retorn. 2. Una tasca que s'esborra a si mateixa després d'executar-se.

## µC/OS-II

Basat en el codi font escrit per µC/OS, i s'introdueix com un producte comercial a 1998, µC/OS-II és un portàtil, "ROM-poder", escalable, amb dret preferent, en temps real, determinista, la multitasca del nucli de microprocessadors, i processador de senyal digital (DSPs). Gestiona fins a 255 tasques de l'aplicació, i la seva grandària es pot escalar (entre 5 a 24 Kbytes) només per tenir les característiques necessàries per a un ús específic.
La major part de µC/OS-II està escrit en ANSI C, el codi de microprocessador específic escrit en llenguatge assemblador. L'ús del llenguatge assemblador es redueix al mínim per facilitar la migració a altres processadors.

### Usos en sistemes encastats

µC/OS-II va ser dissenyat per a usos encastats, el que vol dir que si el productor té les eines apropiades (compilador de C, ensamblador i enllaçador / localitzador), poden incrustar µC/OS-II com a part d'un producte.
µC/OS-II es pot trobar en els següents sistemes encastats
* Avions
* Equips mèdics / dispositius
* equips de comunicacions de dades
* Productes de línia blanca (electrodomèstics)
* Telèfons mòbils, PDA, MID
* controls industrials
* Electrònica de consum
* automoció

### Estats de tasca

µC/OS-II és un sistema operatiu multitasca. Cada tasca és un bucle infinit i pot estar en qualsevol dels següents cinc estats:
* latent
* llest
* Execucció
* En espera (per a un esdeveniment)
* Interrompuda (interromput (ISR))
A més, pot gestionar fins a 255 tasques; No obstant això, es recomana que l'usuari reservi vuit d'aquestes tasques per µC/OS-II, deixant una aplicació fins a 247 tasques.

### Kernel

El Kernel (nucli) és el nom donat al programa que fa la major part de les tasques de manteniment per al sistema operatiu. El control de les mans del gestor d'arrencada cap al nucli, que inicialitza els diferents dispositius a un estat conegut i fa que l'equip estigui llest per a les operacions generals. El nucli és responsable de la gestió de tasques (és a dir, per a la gestió de temps de la CPU) i la comunicació entre tasques. El servei fonamental proporcionat pel nucli és el canvi de context.
El planificador és la part del nucli responsable de determinar què tasca s'executa a continuació. La majoria dels nuclis en temps real es basen prioritat. En un nucli basat en prioritats, el control de la CPU sempre es dona a la tasca de més alta prioritat a punt per funcionar. Hi ha dos tipus de nuclis amb prioritat, no preferent i preventiu. No preferent requereixen que cada tasca fassi alguna cosa per donar explícitament el control de la CPU. S'utilitza un nucli preventiu quan la resposta del sistema és important; Per tant, µC/OS-II i la majoria dels nuclis en temps real comercials són de preferència. La tasca de més alta prioritat a punt per funcionar es dona sempre el control de la CPU.

### L'assignació de tasques

Les tasques amb la major taxa d'execució se'ls dona la més alta prioritat utilitzant programació de velocitat monotònica. Aquest algoritme de planificació s'utilitza en els sistemes operatius en temps real (RTOS) amb una classe de planificació amb prioritat estàtica.

### Gestió de tasques

En la computació, una tasca és una unitat d'execució. En alguns sistemes operatius, una tasca és sinònim d'un procés, en altres amb un fil. En processament per sistemes informàtics, una tasca és una unitat d'execució dins d'un treball. L'usuari del sistema de µC/OS-II és capaç de controlar les tasques amb les següents característiques:
* funció de tasques
* la creació de tasques
* pila de tasques i la comprovació de piles
* eliminació de tasques
* Canviar la prioritat d'una tasca
* Suspendre i reprendre una tasca
* Obtenir informació sobre una tasca

### La gestió de la memòria

Per tal d'evitar la fragmentació, µC/OS-II permet a les aplicacions obtenir blocs de memòria de grandària fixa d'una partició feta d'una àrea de memòria contigua. Tots els blocs de memòria són de la mateixa mida, i la partició conté un nombre de blocs. L'assignació i desassignació d'aquests blocs de memòria es realitza en un temps constant i és un sistema determinista.

### Gestionar el temps

µC/OS-II requereix que un usuari proporciona una font de temps diari per fer un seguiment de les demores i els temps d'espera. Una marca ha de passar entre 10 i 1000 vegades per segon o Hertz. Com més ràpida sigui la taxa de paparra; la sobrecàrrega µC/OS-II l'imposa en el sistema. La freqüència del senyal de rellotge depèn de la resolució desitjada per a una aplicació. Fonts paparres poden ser obtingudes per dedicar un temporitzador de maquinari, o mitjançant la generació d'una interrupció d'un senyal (50/60 Hz) de la línia d'alimentació de CA. Aquesta font de temps diari es diu un cicle de rellotge.
Després d'un cicle de rellotge, les tasques poden ser:
* El retard d'una tasca
* Reprendre una tasca retardada

### La comunicació entre les tasques

Intertask entre processos de comunicació en µC/OS-II es produeix a través de: semàfors, bústia de missatges, cues de missatges, tasques i rutines de servei d'interrupció (ISR)). Poden interactuar entre si quan una tasca o un ISR senyals d'una tasca a través d'un objecte de nucli anomenat un bloc de control d'esdeveniments (BCE). El senyal es considera que és un esdeveniment.

## MicroC/OS-III

µC/OS-III és l'acrònim de micro-controlador Sistemes operatius Versió 3, introduït en 2009 i afegint funcionalitat a la µC/OS-II RTOS.
µC/OS-III ofereix totes les característiques i funcions de la µC/OS-II. La major diferència és el nombre de tasques. µC/OS-II permet que només 1 de tasques en cadascun dels 255 nivells de prioritat, de manera que un màxim de 255 tasques. µC/OS-III permet un nombre il·limitat de tasques de l'aplicació en cada un d'un nombre il·limitat de nivells de prioritat, limitada únicament per l'accés d'un processador a la memòria.
µC/OS-II i µC/OS-III són actualment mantinguts per Micrium Inc, i pot ser objecte de llicència per producte o per línia de producte.

### Usos en sistemes encastats

Els usos són els mateixos que per a µC/OS-II

### Estats de tasca

µC/OS-III és un sistema operatiu multitasca. Cada tasca és un bucle infinit. Les prioritats de les tasques poden variar des de 0 (prioritat més alta) a un màxim de 255 (prioritat més baixa possible).

### Round robin programació

Quan dos o més tasques tenen la mateixa prioritat, el nucli permet una tasca a executar per una quantitat de temps per defecte, anomenada quàntica, i es selecciona una altra tasca. Aquest procés s'anomena planificació round-robin o segmentació de temps. El nucli dona el control a la següent tasca en línia si:
* La tasca actual no té feina que fer durant el interval de temps o
* La tasca actual finalitza abans que el final del seu segment de temps o
* L'interval de temps s'acaba.

### Kernel

La funcionalitat del nucli per a µC/OS-III és el mateix que per µC/OS-II.

### Gestió de tasques

La gestió de tasques també funciona de la mateixa com per µC/OS-II, però,µC/OS-III és compatible amb múltiples tasques i permet que l'aplicació pugui tenir qualsevol nombre de tasques. El nombre màxim de tasques està limitada només per la quantitat de memòria (tant de codi i dades d'espai) disponible per al processador.
Una tasca es pot implementar a través de execució per a la programació de la terminació, en què la tasca s'esborra a si mateixa quan estigui acabada o més típicament com un bucle infinit, a l'espera per als esdeveniments que tinguin lloc i el processament d'aquests esdeveniments.

### La gestió de la memòria

La gestió de memòria és manejada de la mateixa manera com es va realitzar a µC/OS-II.

### Gestionar el temps

µC/OS-III ofereix les mateixes característiques de gestió del temps que µC/OS-II. També proporciona serveis d'aplicacions perquè les tasques es puguin suspendre la seva execució pels retards de temps definits per l'usuari. Els retards s'especifiquen ja sigui per rellotge d'hores, minuts, segons i mil·lisegons.

### La comunicació entre les tasques

A vegades és necessari per a una tasca o un ISR per comunicar informació a una altra tasca, perquè és perillós per a dues tasques per accedir a les mateixes dades específics o els recursos de maquinari de forma simultània. Això es pot resoldre mitjançant la transferència d'informació denominat comunicació entre tasques. Aquesta transferència d'informació es diu comunicació entre tasques. La informació pot ser comunicada entre les tasques de dues maneres: a través de dades globals, o mitjançant l'enviament de missatges.
En utilitzar variables globals, cada tasca o ISR s'han d'assegurar que té accés exclusiu a les variables. Si un ISR està implicat, l'única manera de garantir l'accés exclusiu a les variables comunes és desactivar interrupcions. Si dues tasques compartir dades, cadascun pot tenir accés exclusiu a les variables ja sigui mitjançant la desactivació de les interrupcions, el bloqueig del planificador, l'ús d'un semàfor, o preferiblement, usant una exclusió mútua de semàfors. Els missatges poden enviar-se a un objecte intermedi anomenat 1 cua de missatges, o directament a una tasca, ja que en µC/OS-III, cada tasca té la seva pròpia cua de missatges incorporat. Utilitzar una cua de missatges externa si són múltiples tasques d'esperar per als missatges. Enviar un missatge directament a una tasca si només una tasca processarà les dades rebudes. Quan una tasca espera que arribi un missatge, que no consumeix temps de CPU.

### Ports

Un port implica tres aspectes: la CPU, sistema operatiu i taula específica (BSP) de codi. µC/OS-II i compta amb ports per als processadors més populars i taulers en el mercat i és adequat per al seu ús en crítiques per a la seguretat de sistemes encastats, com ara l'aviació, sistemes mèdics i les instal·lacions nuclears. El port µC/OS-III consisteix en l'escriptura o canviant el contingut d'arxius específics de tres nuclis - OS_CPU.H, OS_CPU_A.ASM i OS_CPU_C.C. Cal escriure o modificar el contingut dels arxius específics dels tres CPU: CPU.H, CPU_A.ASM i CPU_C.C. Finalment crear o modificar un paquet de suport de la placa (BSP) de la placa d'avaluació o la placa de destinació que s'utilitza. Un port µC/OS-III és similar a un port µC/OS-II. Hi ha significativament més ports que figuren en aquesta llista, i els ports són susceptibles de canvis continus.