Slides 11 Ucos

Embed Size (px)

Citation preview

  • 8/3/2019 Slides 11 Ucos

    1/51

    C/OS-II

    Micro-Controller Operating

    ys emCore: v2.52Port: Atmel AVR-GCC v270603

    (Julius Luukko)

    Naszly Gbor

    BME MIT ver.: 2010a.opre2

  • 8/3/2019 Slides 11 Ucos

    2/51

    1. A C/OS trtnete

    Fejlesztje: Jean J. Labrosse Motivci: egyik alkalmazshoz RT kernel

    A kernel: mr ismertk, megbzhat, de tldrga volt

    B kernel: ismeretlen, de olcsbb volt vgl ezt vettk meg 2 hnapjuk ment r, hogy pr egyszer taszkot el

    tudjanak indtani mint utbb kiderlt, k voltak az egyik els vev, s a

    kernel mg nem volt normlisan tesztelve

  • 8/3/2019 Slides 11 Ucos

    3/51

    1. A C/OS trtnete

    ezek utn megvettk az A kernelt is ezt 2 nap alatt mkdsre brtk azonban 3 hnap utn talltak egy bug-ot

    viszont a 90 napos garancia lejrt ennek ellenre prbltk rvenni a gyrtt, hogy javtsa

    ki ingyen, hisz voltakpp a hiba bejelentsvelszvessget tesznek nekik

    de a gyrt hajthatatlan volt, gy fizettek a hibajavtsrt,ami 6 hnapig tartott!

    termszetesen iszonyatosan idegesek lettek,radsul a termket is nagy ksssel szlltottk

    le

  • 8/3/2019 Slides 11 Ucos

    4/51

    1. A C/OS trtnete

    Well, it cant be that difficult to write a kernel. All

    Jean J. Labrosse

    estnknt s htvgenknt dolgozva elkszlt

    egy j kernel kb. egy v alatt rt el az A kernel szintjre j cget azonban nem akart alaptani, mert mr

    volt vagy 50 kernel a piacon akkoriban

    t nee s to o s save an restore processorregisters.

  • 8/3/2019 Slides 11 Ucos

    5/51

    1. A C/OS trtnete

    helyette inkbb meg szeretett volna jelentetni egycikket a C Users Journal-ban. De elutastottk azalbbi indokokkal: tl hossz volt a cikk Another kernel article?

    prblkozott az Embedded Systems

    Programming magazinnl is: az elejn hasonl indokokkal utastottk itt is el azonban heti hromszori gyakorisggal rgva a

    szerkeszt flt, vgl sikerlt megjelentetnie a cikket

    akkoriban (1992) lltlag ez volt a magazinlegolvasottabb cikke

  • 8/3/2019 Slides 11 Ucos

    6/51

    1. A C/OS trtnete

    nem sokra r Dr. Bernard Williams, aki tbbekkztt a C Journal kiadja is, felhvta, hogyrdekeln a cikk:

    Jean J. Labrosse: Dont you think you are a little bitlate with this? The article is being published inESP.

    Dr. Bernard Williams: No, No, you dontunderstand, because the article is so long, I wantto make a book out of it.

    knyv: C/OS, The Real-Time Kernel konferencik siker cg

  • 8/3/2019 Slides 11 Ucos

    7/51

    2. A C/OS tulajdonsgai

    forrskdban rendelkezsre ll hordozhat (processzor fgg rszek kln) sklzhat multi-tasking preemptv temez determinisztikus futsi id minden taszknak klnbz mret lehet a stack-je rendszer szolgltatsok: mailbox, queue, semaphore,

    fix mret memria partci, id szolgltatsok stb. interrupt management (255 szint

    egymsbagyazhatsg) robusztus s megbzhat

  • 8/3/2019 Slides 11 Ucos

    8/51

    2. A C/OS tulajdonsgai

    nagyon jl dokumentlt (C/OS-II, The Real-Time Kernelknyv 300 oldalon elemzi a kdot)

    oktatsi clra a kernel ingyenesen hozzfrhet

    kiegszt csomagok: TCP-IP (Protocol Stack) FS (Embedded File System) GUI (Embedded Graphical User Interface) USB Device (Universal Serial Bus Device Stack) USB Host (Universal Serial Bus Host Stack) FL (Flash Loader) Modbus (Embedded Modbus Stack) CAN (CAN Protocol Stack)

    BuildingBlocks (Embedded Software Components) Probe (Real-Time Monitoring)

  • 8/3/2019 Slides 11 Ucos

    9/51

    3. A C/OS felptseApplication software

    C/OS-II(Processor Independent Code)

    OS_CORE.C OS_TASK.C

    C/OS-II Configuration(Application Specific)

    OS_CFG.H

    Hardware

    Software

    CPU Timer

    C/OS-II Port(Processor Specific Code)

    OS_CPU.H OS_CPU.C OS_CPU_A.ASM

    _ . _ .OS_MEM.COS_Q.C uCOS_II.COS_SEM.C uCOS_II.H

    .

  • 8/3/2019 Slides 11 Ucos

    10/51

    4. A C/OS konfigurlsa (OS_CFG.H)

    /* ---------------------- Miscellaneous ----------------------- */

    #Define OS_ARG_CHK_EN 1 /* enable (1) or disable (0) argument checking */

    #Define OS_CPU_HOOKS_EN 0 /* uc/os-ii hooks are found in the processor port files */

    * *

    A sklzs #define sorokkal trtnik a konfigurcis header fjlban.

    _ _

    #Define OS_MAX_EVENTS 20 /* max. Number of event control blocks in your application */#Define OS_MAX_FLAGS 5 /* max. Number of event flag groups in your Application */

    #Define OS_MAX_MEM_PART 10 /* max. Number of memory partitions */

    #Define OS_MAX_QS 5 /* max. Number of queue control blocks in your Application */

    #Define OS_MAX_TASKS 32 /* max. Number of tasks in your application */

    #Define OS_SCHED_LOCK_EN 1 /* include code for osschedlock() and Osschedunlock() */

    #Define OS_TASK_IDLE_STK_SIZE 512 /* idle task stack size */

    #Define OS_TASK_STAT_EN 1 /* enable (1) or disable(0) the statistics task */

    #Define OS_TASK_STAT_STK_SIZE 512 /* statistics task stack size */

    #Define OS_TICKS_PER_SEC 200 /* set the number of ticks in one second */

  • 8/3/2019 Slides 11 Ucos

    11/51

    4. A C/OS konfigurlsa (OS_CFG.H)/* ----------------------- EVENT FLAGS ------------------------ *#define OS_FLAG_EN 0 /* Enable (1) or Disable (0) code generation for EVENT FLAGS */

    #define OS_FLAG_WAIT_CLR_EN 1 /* Include code for Wait on Clear EVENT LAGS */

    #define OS_FLAG_ACCEPT_EN 1 /* Include code for OSFlagAccept() */

    #define OS_FLAG_DEL_EN 1 /* Include code for OSFlagDel() */#define OS_FLAG_QUERY_EN 1 /* Include code for OSFlagQuery() */

    /* ------------------------ SEMAPHORES ------------------------ */

    e ne _ _ na e or sa e co e genera on or

    #define OS_SEM_ACCEPT_EN 1 /* Include code for OSSemAccept() */#define OS_SEM_DEL_EN 1 /* Include code for OSSemDel() */

    #define OS_SEM_QUERY_EN 1 /* Include code for OSSemQuery() */

    /* ---------------- MUTUAL EXCLUSION SEMAPHORES --------------- */#define OS_MUTEX_EN 0 /* Enable (1) or Disable (0) code generation for MUTEX */

    #define OS_MUTEX_ACCEPT_EN 1 /* Include code for OSMutexAccept() */

    #define OS_MUTEX_DEL_EN 1 /* Include code for OSMutexDel() */

    #define OS_MUTEX_QUERY_EN 1 /* Include code for OSMutexQuery() */

  • 8/3/2019 Slides 11 Ucos

    12/51

    4. A C/OS konfigurlsa (OS_CFG.H)/* -------------------- MESSAGE MAILBOXES --------------------- */#define OS_MBOX_EN 1 /* Enable (1) or Disable (0) code generation for MAILBOXES */

    #define OS_MBOX_ACCEPT_EN 1 /* Include code for OSMboxAccept() */

    #define OS_MBOX_DEL_EN 0 /* Include code for OSMboxDel() */

    #define OS_MBOX_POST_EN 1 /* Include code for OSMboxPost() */#define OS_MBOX_POST_OPT_EN 0 /* Include code for OSMboxPostOpt() */

    #define OS_MBOX_QUERY_EN 0 /* Include code for OSMboxQuery() */

    * ---------------------- ---------------------- *

    #define OS_Q_EN 1 /* Enable (1) or Disable (0) code generation for QUEUES */#define OS_Q_ACCEPT_EN 1 /* Include code for OSQAccept() */

    #define OS_Q_DEL_EN 1 /* Include code for OSQDel() */

    #define OS_Q_FLUSH_EN 1 /* Include code for OSQFlush() */

    #define OS_Q_POST_EN 1 /* Include code for OSQPost() */

    #define OS_Q_POST_FRONT_EN 1 /* Include code for OSQPostFront() */#define OS_Q_POST_OPT_EN 1 /* Include code for OSQPostOpt() */

    #define OS_Q_QUERY_EN 1 /* Include code for OSQQuery() */

    /* --------------------- MEMORY MANAGEMENT -------------------- */

    #define OS_MEM_EN 0 /* Enable (1) or Disable (0) code gen.for MEM.MANAGER */#define OS_MEM_QUERY_EN 1 /* Include code for OSMemQuery() */

  • 8/3/2019 Slides 11 Ucos

    13/51

    4. A C/OS konfigurlsa (OS_CFG.H)/* --------------------- TASK MANAGEMENT ---------------------- */

    #define OS_TASK_CHANGE_PRIO_EN 0 /* Include code for OSTaskChangePrio() */

    #define OS_TASK_CREATE_EN 0 /* Include code for OSTaskCreate() */

    #define OS_TASK_CREATE_EXT_EN 1 /* Include code for OSTaskCreateExt() */

    #define OS_TASK_DEL_EN 0 /* Include code for OSTaskDel() */

    #define OS_TASK_SUSPEND_EN 0 /* Include code for OSTaskSuspend() and OSTaskResume() */

    #define OS_TASK_QUERY_EN 0 /* Include code for OSTaskQuery() */

    /* --------------------- TIME MANAGEMENT ---------------------- */

    #define OS_TIME_DLY_HMSM_EN 1 /* Include code for OSTimeDlyHMSM() */

    #define OS_TIME_DLY_RESUME_EN 0 /* Include code for OSTimeDlyResume() */

    #define OS_TIME_GET_SET_EN 0 /* Include code for OSTimeGet() and OSTimeSet() */

    typedefINT16U OS_FLAGS; /* Date type for event flag bits (8, 16 or 32 bits) */

  • 8/3/2019 Slides 11 Ucos

    14/51

    4. A C/OS konfigurlsa (OS_CFG.H)#if OS_SEM_ACCEPT_EN > 0

    INT16U OSSemAccept (OS_EVENT *pevent) {

    INT16U cnt;

    #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */

    OS_CPU_SR cpu_sr = 0;

    A forrskd a #define sorokra plten tartalmaz feltteles fordtsi direktvkat.

    en

    #if OS_ARG_CHK_EN > 0

    if(pevent == (OS_EVENT *)0) { /* Validate 'pevent' */

    return (0);

    }

    #endif

    }

    #endif

  • 8/3/2019 Slides 11 Ucos

    15/51

    5. A

    C/OS taszk llapotai

    WAITING

    READY RUNNING

    OSIntExit()

    *

    *

  • 8/3/2019 Slides 11 Ucos

    16/51

    5. A C/OS taszk llapotai

    Kt specilis llapot: DORMANT: szunnyad, akkor van ebben az llapotban a

    taszk, amikor a memriban ugyan megtallhat, de az

    temez hatskrben nincs benne (nem hoztk mg ltreOSTaskCreate(), vagy trltk OSTaskDel())

    ISR: a taszkot megszaktotta egy interrupt rutin. Ha a rutinmellkhatsaknt egy magasabb priorits taszk vlik futsra

    kssz, akkor a rutin vgeztvel az kerl a RUNNIG llapotba,s a megszaktott taszk pedig a WAITING-be

    Ha nincs egy futsra ksz taszk sem, akkor egyspecilis taszk, az OSTaskIdle() fut.

  • 8/3/2019 Slides 11 Ucos

    17/51

    6. A C/OS temezje

    A futsra ksz taszkok egy 2D bitmapstruktrban troldnak, ahol az egyes bitek

    ep eze a asz o a . a egy , ahozz tartoz taszk futsra ksz. A bitekprioritst is jelentenek (az egyik sarokban alegmagasabb, a msikban a legalacsonyabbpriorits taszkhoz tartoz bit tallhat).

  • 8/3/2019 Slides 11 Ucos

    18/51

    6. A C/OS temezje

    + Gyors beszrs, ami fggetlen a futsra ksztaszkok szmtl. Csupn pr egyszer mvelet kella megfelel bit belltshoz. Tovbb a

    legmagasabb futsra ksz taszkot is gyorsan meglehet tallni lookup-table segtsgvel. A taszkoknak egyedi prioritssal kell rendelkeznik

    (azaz a round-robin / time slice temezs nem

    lehetsges) Szksg van egy lookup tblzatra elre szmtottrtkekkel a bitminta legmagasabb prioritsfutsra ksz taszkmegfeleltetshez

  • 8/3/2019 Slides 11 Ucos

    19/51

  • 8/3/2019 Slides 11 Ucos

    20/51

    6. A C/OS temezje

    ptkockk temezshez:1. taszk kivtele a futsra kszek kzl

    .

    3. a legmagasabb priorits, futsra ksz taszk megtallsa4. kontextus vlts

  • 8/3/2019 Slides 11 Ucos

    21/51

    6. A C/OS temezje

    Kik hasznljk az imnt ismertetettptkockkat?

    1.

    asz v te e a ut sra sze z :vrakoz rendszerhvsok (pl. OSSemPend(),OSMBoxPend(), OSTimeDly()). Elszrelvgzik a rjuk jellemz mveletet (pl. szemafor

    lefoglalsa), majd kiveszik a futsra ksz taszkokhalmazbl az ket meghv taszkot. A vgnpedig meghvjk az temezt.

  • 8/3/2019 Slides 11 Ucos

    22/51

    6. A C/OS temezje

    2. Taszk futsra kssz ttele: elengedrendszerhvsok (pl. OSSemPost(),OSMBoxPost va adott id letelte. Elszr

    elvgzik a rjuk jellemz mveletet (pl. szemaforfelszabadtsa), majd futsra kssz teszik amegfelel taszkot, taszkokat. A vgn pedigmeghvjk az temezt.

  • 8/3/2019 Slides 11 Ucos

    23/51

    6. A C/OS temezje

    3. A legmagasabb priorits, futsra ksz taszkmegtallsa: az temez feladata. Ha ale ma asabb riorits futsra ksz taszk

    prioritsa nem egyezik meg az ppen futval,elvgzi a taszk vltst.

    4. Kontextus vlts: szintn az temez feladata.

  • 8/3/2019 Slides 11 Ucos

    24/51

    6. A C/OS temezje

    OSRdyGrp |= OSMapTbl[prio >> 3];

    OSRdyTbl[prio >> 3] |= OSMapTbl[prio & 0x07];

    2. Taszk futsra kssz tteleA taszk prioritsa ltal kijellt biteket 1-be kell billenteniaz OSRdyGrp-ben s az OSRdyTbl-ben.

    Index Bit mask (binary)0 000000011 00000010

    2 000001003 000010004 00010000

    5 00100000

    6 010000007 10000000

    OSMapTbl:

    prio: a taszk prioritsaprio >> 3: YYYprio & 0x07: XXX

    0 0 Y Y Y X X XPriorits:

    bit pozci OSRdyTbl egyik sorn bell

    kijelli OSRdyTbl egyik sort illetveaz ehhez a sorhoz tartoz OSRdyGrp bitet

  • 8/3/2019 Slides 11 Ucos

    25/51

    6. A C/OS temezje

    1. Taszk kivtele a futsra kszek kzlA taszk prioritsa ltal kijellt bitet trlni kell a megfelelOSRdyTbl sorbl. Ha ezzel nem marad egy futsra ksztaszk sem az adott sorban, a sornak megfelel bitet azOSRdyGrp-bl is trlni kell.

    if ((OSRdyTbl[prio >> 3] &= ~OSMapTbl[prio & 0x07]) == 0)OSRdyGrp &= ~OSMapTbl[prio >> 3];

  • 8/3/2019 Slides 11 Ucos

    26/51

    6. A C/OS temezje

    3. A legmagasabb priorits futsra ksz taszk megtallsa

    Erre a clra egy segdtblzatot hasznlnak, aminek az afeladata, hogy egy adott 8 bites szmrl megmondja, melyikaz a legalacsonyabb bitpozci (azaz legmagasabb priorits),ahol 1-es tallhat.

    Pldul:

    0 0 1 0 1 1 0 0

    7. 6. 5. 4. 3. 2. 1. 0.

    0x2C 2.

    Hexa Binris Legalacsonyabb 1-es

  • 8/3/2019 Slides 11 Ucos

    27/51

    6. A C/OS temezjeINT8U const OSUnMapTbl[256] = {

    0,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0x00 to 0x0F */

    4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0x10 to 0x1F */

    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0x20 to 0x2F */

    4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0x30 to 0x3F */

    6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0x40 to 0x4F */

    4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0x50 to 0x5F */

    , , , , , , , , , , , , , , , ,

    4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0x70 to 0x7F */7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0x80 to 0x8F */

    4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0x90 to 0x9F */

    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0xA0 to 0xAF */

    4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0xB0 to 0xBF */6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0xC0 to 0xCF */

    4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0xD0 to 0xDF */

    5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, /* 0xE0 to 0xEF */

    4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0 /* 0xF0 to 0xFF */

    };

  • 8/3/2019 Slides 11 Ucos

    28/51

    6. A C/OS temezje

    Elszr meg kell hatrozni azt a sort (csoportot, YYYrtket), ami a legmagasabb priorits 1-es tartalmazza,majd a soron bell is meg kell keresni a legmagasabbprioritst azonost 1-est (XXX). Ezt kveten alegmagasabb priorits mr szmolhat: YYY * 8 + XXX.

    y = OSUnMapTbl[OSRdyGrp];x = OSUnMapTbl[OSRdyTbl[y]];

    prio = (y

  • 8/3/2019 Slides 11 Ucos

    29/51

    6. A C/OS temezje

    4. Kontextus vlts

    1.az aktulis krnyezet mentse: regiszterek mentse veremmutat mentse

    A kontextus vlts platform fgg!

    2.az j krnyezet visszalltsa: veremmutat visszalltsa regiszterek visszalltsa

  • 8/3/2019 Slides 11 Ucos

    30/51

    6. A C/OS temezje

    Az temez egy fggvny, amelyet msOS fggvnyek hvhatnak meg. Pl.: ha leakarunk foglalni egy szemafort, de az mgnem szabad, akkor az OSSemPend()

    v s vesz a u sra sze z azaktulis taszkot, s meghvja az temezt,ami eldnti, hogy a megmaradt futsra

    ksz taszkok kzl melyiknek van alegmagasabb a prioritsa, s vgrehajtja akontextus vltst.

  • 8/3/2019 Slides 11 Ucos

    31/51

    6. A C/OS temezjevoid OSSched (void)

    {

    INT8U y;

    OS_ENTER_CRITICAL();

    if ((OSLockNesting | OSIntNesting) == 0) {y = OSUnMapTbl[OSRdyGrp];

    OSPrioHighRdy = (INT8U)((y

  • 8/3/2019 Slides 11 Ucos

    32/51

    6. A C/OS temezje

    if (OSPrioHighRdy != OSPrioCur) {

    OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];

    OSCtxSwCtr++;

    OS_TASK_SW();}

    A kontextusvlts azzal kezddik, hogy kikeressk a legmagasabb prioritsfutsra ksz taszk TCB-jre (Task Control Block) mutat pointert. (A TCB troljaa taszkra jellemz adatokat mint priorits, sttusz, verem mutat stb. Mskrnyezetben PCB-nek nevezik (Process Control Block).) Ezutn egy, akontextusvltsokat statisztikai okokbl szmol szmll rtkt nveljkeggyel. A tnyleges krnyezetvltst (regiszterek, stack pointer mentse,visszalltsa) pedig processzor fgg assembly kd vgzi.

  • 8/3/2019 Slides 11 Ucos

    33/51

    6. A C/OS temezje

    typedef struct os_tcb {

    OS_STK *OSTCBStkPtr; // Pointer to top of stack

    ...

    INT16U OSTCBDly; // Ticks to delay task or timeout wait

    Fontosabb mezk a Task Control Block struktrban:

    INT8U OSTCBStat; Task status

    INT8U OSTCBPrio; // Task priority

    ...

    } OS_TCB;

  • 8/3/2019 Slides 11 Ucos

    34/51

    6. A C/OS temezje

    OS_TASK_SW()

    1. az aktulis krnyezet mentse: regiszterek mentse veremmutat mentse

    2. az j krnyezet visszalltsa:

    PUSHRS

    PUSHSREG

    LDS R30,OSTCBCur

    LDS R31,OSTCBCur+1

    in r28,_SFR_IO_ADDR(SPL)

    ST Z+,R28

    in r29,_SFR_IO_ADDR(SPH)ST Z+,R29

    CALL OSTaskSwHook

    LDS R16 OSPrioHi hRd

    veremmutat visszalltsa regiszterek visszalltsa

    STS OSPrioCur,R16

    LDS R30,OSTCBHighRdy

    LDS R31,OSTCBHighRdy+1

    STS OSTCBCur,R30

    STS OSTCBCur+1,R31

    LD R28,Z+out _SFR_IO_ADDR(SPL),R28

    LD R29,Z+

    out _SFR_IO_ADDR(SPH),R29

    POPSREG

    POPRS

    A kontextus vlts platform fgg!A bemutatott kdrszlet AVR ATmega128mikrovezrlre vonatkozik.

  • 8/3/2019 Slides 11 Ucos

    35/51

    7. Idzt (timer)

    klnfle okokbl szksg lehet az idmlsnak kvetsre, pldul:

    t me-s c ng temez s ez - a att n ncs taszk futsnak adott ideig trtn felfggesztse timeoutos OS hvsok fggvny adott id mlva trtn meghvshoz fggvny adott idkznknt trtn periodikus

    meghvshoz az id mrsre

  • 8/3/2019 Slides 11 Ucos

    36/51

    7. Idzt (timer)

    ezen a clokra az OS felhz egy hardvertimert (heartbeat timer), ami aztnpe o us egsza so a ge eticks)

    Mekkora legyen egy rats? minl kisebb, annl pontosabbak lesznek az

    idztn alapul szolgltatsok minl nagyobb, annl kevesebb overheadet jelent

    a timer megszakts

  • 8/3/2019 Slides 11 Ucos

    37/51

    7. Idzt (timer)

    Erre a megszaktsra az OS felfz nmikdot sajt magbl. Ez biztostja pldulaz , ogy a egy asz a o e e emagt vrakoz llapotba, akkor az idletelte utn futsra ksz lehessen.

    Tovbb ha felbredse esetn alegnagyobb priorits, akkor a timer ISR utnaz OS erre a taszkra adja a futs jogt.Megvalstva a preempcit.

  • 8/3/2019 Slides 11 Ucos

    38/51

    7. Idzt (timer)

    taskDelay (4) taskDelay (4)

    Pontossg: 1 rats Minimum n rats ksleltetshez n+1-et kell megadni

    Time

    System ticks3.93 ticks 3.16 ticks

  • 8/3/2019 Slides 11 Ucos

    39/51

    8. Egyb OS szolgltatsok

    Taszk kezelsLtrehozsMegszntets

    Id kezelsasz u s na a o ve r n

    ksleltetseRendszer id lekrdezs

    Memria partcik kezelseLefoglalsFelszabadts

  • 8/3/2019 Slides 11 Ucos

    40/51

    8. Egyb OS szolgltatsok

    Szinkronizci / kommunikciSzemafor (szmll)Mailbox (~ szemafor + void*)Queue (~ n*mailbox)

    Mutex (szemafor priorits inverzi ellenivdelemmel: priorits rkls protokoll)Event flags (8, 16, 32 bites vltoz; bitek

    tetszleges S, VAGY kombincijra lehetvrni)

  • 8/3/2019 Slides 11 Ucos

    41/51

    9. A C/OS alkalmazs tipikus szerkezetevoid YourTask (void *pdata){

    for (;;) {

    /* USER CODE */

    !! Call one of uC/OS-IIs

    !! services: OSMboxPend(),

    !! OSQPend(),OSSemPend(),

    !! OSTaskDel(OS_PRIO_SELF),

    !! OSTaskSuspend(OS_PRIO_SELF),

    void YourTask (void *pdata)

    vagy

    Vgtelen ciklus taszk szervezs

    Single shot taszk szervezs

    void main (void){

    OSInit(); /* Initialize uC/OS-II */

    ...

    !! Create at least 1 task using either OSTaskCreate() or

    !! OSTaskCreateExt(). And maybe other OS objects (MBox, ...).

    ...

    OSStart(); /* Start multitasking! OSStart() will not return */}

    ,

    /* USER CODE */}

    }

    /* USER CODE */OSTaskDel(OS_PRIO_SELF);

    }

  • 8/3/2019 Slides 11 Ucos

    42/51

    10. Egyszer pldaprogram

    A kvetkezkben egy egyszer pldaprogramsegtsgvel szemlltetjk a C/OS mkdst.

    A program tartalmaz egy inicializl taszkot, melynekfeladata az idzt megszakts belltsa (ami az OSidkezel szolgltatsaihoz kell), valamint ltrehoz msik

    ,

    a hagyomnyos vgtelen ciklus taszk szervezstleltr, egyszeri lefuts taszk struktrra). A msik kt taszk mindegyike 4ms hossz hasznos kd

    futst szimullja (szoftveres vrakoz hurkokkal). Eztkveten mindkett elkldi magt OS rtelemben vett(idre) vrakoz llapotba. A magasabb priorits 4, azalacsonyabb 2 ra tsig (1 ra ts = 10 ms). (Mindkt

    taszk vgtelen ciklus szervezs.)

  • 8/3/2019 Slides 11 Ucos

    43/51

    10. Egyszer pldaprogram (kd 1/4)#include "includes.h"

    // Prioritsok (kisebb szm -> nagyobb priorits):

    #define TASK_INIT_PRIO 24

    #define TASK_HIGH_PRIO 37

    #define TASK_LOW_PRIO 50

    Vermek lefo lalsa:

    #define STACK_SIZE 128

    OS_STK TaskInitStk[STACK_SIZE];

    OS_STK TaskHighStk[STACK_SIZE];

    OS_STK TaskLowStk[STACK_SIZE];

    // Fggvny deklarcik:void TaskInit(void *data);

    void TaskHigh(void *data);

    void TaskLow(void *data);

    ...

  • 8/3/2019 Slides 11 Ucos

    44/51

    10. Egyszer pldaprogram (kd 2/4)...

    void main (void)

    {

    OSInit(); // Az OS inicializcija

    // TaskInit ltrehozsa:

    OSTaskCreate(

    // A taszk kdjt tartalmaz fggvny:

    TaskInit,

    // Opcionlis paramter:NULL,

    // A taszk vermnek teteje:

    &TaskInitStk[STACK_SIZE - 1],

    // A taszkhoz rendelt priorits:

    TASK_INIT_PRIO);

    OSStart(); // Multitaszking indtsa

    }

    ...

  • 8/3/2019 Slides 11 Ucos

    45/51

    10. Egyszer pldaprogram (kd 3/4)...

    void TaskInit (void *data) {

    // Timer interrupt inicializls (1 OS tick = 10ms):

    INIT_TIMER();

    // TaskHigh s TaskLow ltrehozsa:

    OSTaskCreate(

    TaskHigh, NULL, &TaskHighStk[STACK_SIZE - 1],

    TASK_HIGH_PRIO);

    OSTaskCreate(

    TaskLow, NULL, &TaskLowStk[STACK_SIZE - 1],

    TASK_LOW_PRIO);

    // Sajt magunk trlse -> plda egyszer lefut taszkra:

    OSTaskDel(OS_PRIO_SELF);

    }

    ...

  • 8/3/2019 Slides 11 Ucos

    46/51

    10. Egyszer pldaprogram (kd 4/4)...

    void TaskHigh(void *data) {

    while(1) {

    // 4ms hasznos kd szimullsa:

    _delay_ms(4);// Vrakoz llapotba klds, breds 4 OS tick mlva:

    OSTimeDly(4);

    }

    }

    void TaskLow(void *data) {

    while(1) {

    // 4ms hasznos kd szimullsa:

    _delay_ms(4);

    // Vrakoz llapotba klds, breds 2 OS tick mlva:

    OSTimeDly(2);

    }

    }

  • 8/3/2019 Slides 11 Ucos

    47/51

    10. Egyszer pldaprogram (futs)

    Amennyiben az adott fejlesztpanelrendelkezik analg kimenettel, a program

    futsnak szemlltetsre egy bevltgyakorlat, hogy az ppen fut taszkpr or s va ar nyos esz s g sz n eadunk ki. (Tovbb rdemes lehet mg azidzt megszaktshoz is rendelni egy

    szintet.)

  • 8/3/2019 Slides 11 Ucos

    48/51

    10. Egyszer pldaprogram (futs)

    Bizonyos opercis rendszerekhez (pl.FreeRTOS) ltezik ilyen kiegszt modul.

    A C/OS itt alkalmazott verzijt nmikiegszts, mdosts segtsgvele e e a a mass enn a e a a ra.

  • 8/3/2019 Slides 11 Ucos

    49/51

    10. Egyszer pldaprogram (futs)

    TaskInit

    TimerISR

    10ms4ms

    1

    2

    TaskHigh

    TaskLow TaskIdle

    4ms1

    2

    A futs szemlltetse a taszkokhoz s az idzt megszaktshozrendelt feszltsg szintek kiadsval.

  • 8/3/2019 Slides 11 Ucos

    50/51

    10. Egyszer pldaprogram (futs)

    A program futsa az elz brn jlkvethet. A teljessgre trtn magyarzat

    helyett kt fontosabb szrevtel a szmokkaljellt idpontokra:

    (1): ezekben a pontokban mind a magas, mindaz alacsony priorits taszk futsra ksz.Lthat, hogy az OS temezje ilyen esetbenelszr a magas priorits taszkot temezi.

    (2): ezen esetekben pedig azt rdemesszrevenni, hogy egy megszakts utn NEMfelttlen a megszaktott taszk folytatja a futst!

  • 8/3/2019 Slides 11 Ucos

    51/51

    10. jdonsgok v2.52 ta Vrakozs egyszerre tbb esemnyre:

    szemafor, mailbox, queue mutex, event

    flag mg nem tmogatott (v2.86) Idztk: fggvny adott id mlva vagyeriodikus hvsra v2.81

    255 taszk tmogatsa (v2.80) C/OS-IIITetszleges szm taszk s egyb OS

    objektumEgy prioritsi szinten lehet tbb taszk is (

    round-robin vagy time-slicing temezs)Nulla kzeli megszakts tilts id