1 / 59

Het uC/OS-II RTOS

Het uC/OS-II RTOS. Embedded systeem. Programma voorgrond/achtergrond systeem. Operating systeem nodig ?.

ekram
Download Presentation

Het uC/OS-II RTOS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Het uC/OS-II RTOS

  2. Embedded systeem

  3. Programma voorgrond/achtergrond systeem

  4. Operating systeem nodig ? De meeste toepassingen (in het bijzonder 8-bit systemen) bestaan uit slechts een programma, en daarom geen behoefte aan een "traditionele" besturingssysteem. ROM monitoren vervangen door het besturingssysteem. Meer complexe systemen van vandaag vereisen meer complexe besturing en daarom behoefte aan een besturingssysteem van een soort.

  5. Type operating systemen • monolithische kernel Desktop (windows,linux,…) • microkernel QNX, minix, symbian OS • kleine real-time OS Kernel in de vorm van een API.

  6. Het microCOS-II operating systeem

  7. Plaats van het operating systeem

  8. MicroC/OS-II Kenmerken: • Multitasking (max. 64 taken) • Prioriteit • Preemptive • Deterministisch • portable • ROMable, scalable

  9. Tekortkomingen: • Geen priority inherintance • Elke taak heeft een unieke prioriteit. MicroC/OS-II Kenmerken: • Services : Mailboxes, Queues, Semaphores, fixedsized memory partitions, time-related functions • Interrupt Management: geneste Interrupt • Robuust en betrouwbaar

  10. MicroC/OS-II architectuur

  11. Taken: • Kan 64 taken managen (2 taken voor eigen gebruik) • De 4 hoogste en de 4 laagste prioriteiten zijn voor eigen gebruik • 56 applicatie taken • Hoe lager de waarde van de prioriteit hoe hoger de prioriteit. • De taak prioriteit nummer dient ook als de taak identifier

  12. Non –preemptivetaak scheduling

  13. PreemptiveTaak scheduling

  14. Voorbeeld taken. voidtaak1(void* pdata) { while(1) print a; } int main() { initialiseer; creëer taak1; creëer taak2; start scheduling; } voidtaak2(void* pdata) { while(1) print b; }

  15. Task context switch

  16. Task context switch

  17. Datastructuur van de ready-list

  18. Datastructuur van de ready-list Voordeel: • store/load in constante tijd. Nadeel: • Taken kunnen niet dezelfde prioriteit hebben’ • Aantal taken is gelimiteerd.

  19. Datastructuur na de initialisatie 2 taken(Stat en Idle) die door het OS gebruikt worden

  20. Suspended van een taak Link blijft bestaan Bit wordt gecleared

  21. Running (2)Zoek hoogste prioriteit in groep (1)Zoek hoogste prioriteit groep (3)Zet state op running

  22. Beheer van de taken • Wanneer een taak wordt gemaakt, wordt er een Task Control Block aangewezen, OS_TCB • OS_TCB is een data structuur die wordt gebruikt door UC/OS-II de state van een taak bij te behouden wanneer het preempted wordt • Alle OS_TCB staan in het RAM • Een OS_TCB wordt geïnitialiseerd wanneer een taak wordt gemaakt

  23. Task context switch

  24. Task context switch Elke taak heeft een stack waar de bijbehorende informatie wordt opgeslagen. Doel contex switch Om ervoor te zorgen dat de taak die gedwongen wordt de CPU op te geven, verder kan gaan zonder verlies van alle vitale informatie of gegevens

  25. Task context switch

  26. Task context switch

  27. Task context switchvoor een taak wisseling stacktaak 2 Stack pointer stacktaak 1 CPU registers bij het switchen Lokale variabele taak 1 Taak 2 code adres bij het switchen Taak 2 lokale variabele bij het switchen return adres return adres Taak 1 is running Taak 2 wordt runningis ready

  28. Task context switchtijdens een taak wisseling CPU registers bij het switchen Taak 2 code adres bij het switchen Taak 2 lokale variabele bij het switchen Lokale variabele Return adres Return adres Taak 1 stack Taak 2 stack Huidige program counter Huidige CPU registers Taak 1 TCB Taak 1 TCB Stack pointer Stack pointer huidige stackpointer

  29. Task context switchna een taak wisseling Stack pointer CPU registers bij het switchen Loacale variabele taak 2 Taak 1 code adres bij het switchen Taak 1 lokale variabele bij het switchen Return adres return adres Taak 1 wordt running is ready Taak 2 running

  30. Task context switch • Interrupt (hardware of software) van de context switch • Push return adres • Push FLAGS register • ISR (context switch routine) • Push alle registers • Sla SP op in TCB (task control block) • Select de ready taak met de hoogste prioriteit (Scheduler) • Restore de SP van de TCB van de geselecteerde taak • Pop alle registers • iret (return interrupt, pop FLAGS en return adres) • Switch to new task

  31. Memory management

  32. Het aanvragen van geheugen. • Dynamic memory allocation kan verkregen worden door gebruik te maken van malloc() en de free() functies • Gebruik van malloc() en de free() in een embedded real-time system is gevaarlijk • Eventueel kan fragmentation plaatsvinden • Execution time van malloc() en free() zijn nondeterministic. • Het uC/OS-II kent geheugen blokken met een vaste grootte toe. • Geheugenblokken zijn afkomstig van een partitie die in het geheugen gedeclareerd is. • Het alloceren en dealloceren van geheugen gebeurt hierdoor in een continue tijd. • Geheugenblokken kunnen verschillende grootte hebben.

  33. Het aanvragen van geheugen. geheugenblokken multiple memory partitions memory partition

  34. Het aanvragen van geheugen. Memory Control Block • Het uC/OS-II houdt het geheugen bij d.m.v een Memory Control Block (MCB) • Elke partitie heeft zijn eigen MCB. • Initialisatie wordt gedaan door de functie OS_MemInit() die de gelinkte lijst creeerd.

  35. Memory control block. typedef struct { void *OSMemAddr; //A void *OSMemFreeList; //B INT32U OSMemBlkSize; //C INT32U OSMemNBlks; //D INT32U OSMemNFree; //E } OS_MEM; Is een pointer naar het begin van de geheugenpartitie. Is een pointer naar het eerst volgende vrije geheugen ruimte. Is de grootte van elke geheugenblok in de partitie. Is het totaal aan geheugenblokken per partitie. Hoeveel geheugenblokken beschikbaar zijn.

  36. Creëren van een partitie OSMemCreate() OS_MEM *CommTxBuf; INT8U CommTxPart[100][32]; void main (void) { INT8U err; OSInit(); . . CommTxBuf = OSMemCreate(CommTxPart, 100, 32, &err); . . OSStart(); } • Vier argumenten zijn vereist • Begin addres van de memory partition. • Het aantal blocken dat gealloceerd wordt van de partition. • De grootte (in bytes) van elk block. • Een pointer naar de variabele die de error code bevat.

  37. Data structuur na een geslaagde OSMemCreate()

  38. Aanmaken van taken void (*task)(void *pd), void *pdata, INT8U OSTaskCreate ( ) { } , INT8U prio OS_STK *ptos void (*task)(void *pd) pointer naar de taak void *pdata pointer naar de argumenten van de taak OS_STK *ptos =>pointer naar de top van de stack int8U prio => prioriteit

  39. Bewerken van taken OSTaskDel() OSTaskDelReq() OSTaskSuspend() OSTaskResume() Quick reference: http://sigpromu.org/brett/elec3730/quickref.html

  40. Interproces communicatiemessage box

  41. Interproces communicatiemessage queue

  42. Message Queue Management

  43. Een Message Queue als een circulare buffer van pointers

  44. C code Het creeeren van een message queue. OS_EVENT *OSQCreate(void **start, INT8U size); #define RIJGROOTTE 5 OS_EVENT *postrijev; void* postrij[RIJGROOTTE]; postrijev=OSQCreate(postrij,RIJGROOTTE);

  45. C code Het schrijven in een message queue. INT8U OSQPost(OS_EVENT *pevent, void *msg); INT8U rt; OS_EVENT *postrijev; typedef struct { char c; int i; }dubbel; dubbel boodschap={1,’i’} rt=OSQPost(postrijev,&boodschap); if(rt==OS_NO_ERR)

  46. C code Het lezen uit een message queue. void *OSQPend(OS_EVENT *pevent, INT16U timeout, INT8U *err); OS_EVENT *postrijev; typedef struct { char c; int i; }dubbel; INT8U fout; dubbel *p_ontv p_ontv=(dubbel*)OSQPend(postrijev,0,&fout); p_ontv= OSQPend( );

  47. Porting uC/OS-II

  48. Een processor kan uC / OS-II draaien, indien aan de volgende eisen voldaan wordt Er moet een C compiler voor de microcontroller zijn. Interrupts moeten in C gedisabled en ge-enabled kunnen worden. De processor moet interrupt ondersteunen en ondersteunt intervallen tussen de 10 en de 100 Hz. De processor moet instructies hebben voor het laden en opslaan van de stack pointer en andere CPU-registers, hetzij op de stack of in het geheugen.

  49. Setting the value of 2 #define constants (OS_CPU.H) Declaring 11 data types (OS_CPU.H) Declaring 2 #define macros (OS_CPU.H) Writing 10 simple functions in C (OS_CPU_C.C) Writing 4 assembly language functions (OS_CPU_A.ASM)

More Related