Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
maxLevel2

This appendix provides a summary of the services provided by µC/OS-II assuming you enabled everything (I didn’t want to clutter this reference with conditional compilation statements). Of course, some of the services might not be included in your application depending on the contents of OS_CFG.H.

The services are listed in the same order as they appear in the chapters:

Table of Contents
maxLevel2

I also included a ‘Task Assignment Worksheet’ which allows you to plan your application by listing your application tasks.

Miscellaneous

Function Prototypes:

...

INT8S     OSCPUUsage                 // CPU usage in percent (%)
INT8U     OSIntNesting               // Interrupt nesting level (0..255)
INT8U     OSLockNesting              // OSSchedLock() nesting level.
BOOLEAN   OSRunning                  // Flag indicating multitasking running
INT8U     OSTaskCtr                  // Number of tasks created
OS_TCB   *OSTCBCur                   // Pointer to current task’s TCB
OS_TCB   *OSTCBHighRdy               // Pointer to highest priority task’s TCB
INT8U     OSTaskCtr                  // Number of tasks created

Task Management

Function Prototypes:

INT8U         OSTaskChangePrio(INT8U oldprio, INT8U newprio);

INT8U         OSTaskCreate(void   (*task)(void *pd), 
                           void    *pdata, 
                           OS_STK  *ptos, 
                           INT8U    prio);

INT8U         OSTaskCreateExt(void  (*task)(void *pd),
                              void   *pdata,
                              OS_STK *ptos,
                              INT8U   prio,
                              INT16U  id,
                              OS_STK *pbos,
                              INT32U  stk_size,
                              void   *pext,
                              INT16U  opt);

INT8U         OSTaskDel(INT8U prio);

INT8U         OSTaskDelReq(INT8U prio);

INT8U         OSTaskResume(INT8U prio);

INT8U         OSTaskSuspend(INT8U prio);

INT8U         OSTaskStkChk(INT8U prio, OS_STK_DATA *pdata);

INT8U         OSTaskQuery(INT8U prio, OS_TCB *pdata);

...

typedef struct os_tcb {

    OS_STK        *OSTCBStkPtr;        // Stack Pointer

    void          *OSTCBExtPtr;        // TCB extension pointer

    OS_STK        *OSTCBStkBottom;     // Ptr to bottom of stack
    INT32U         OSTCBStkSize;       // Size of task stack (#elements)

    INT16U         OSTCBOpt;           // Task options 

    INT16U         OSTCBId;            // Task ID (0..65535)

    struct os_tcb *OSTCBNext;          // Pointer to next     TCB 
    struct os_tcb *OSTCBPrev;          // Pointer to previous TCB 

    OS_EVENT      *OSTCBEventPtr;      // Pointer to ECB                               

    void          *OSTCBMsg;           // Message received 

    OS_FLAG_NODE  *OSTCBFlagNode;      // Pointer to event flag node
    OS_FLAGS       OSTCBFlagsRdy;      // Event flags that made task ready 

    INT16U         OSTCBDly;           // Nbr ticks to delay task or, timeout
    INT8U          OSTCBStat;          // Task status
    INT8U          OSTCBPrio;          // Task priority (0 == highest) 

    INT8U          OSTCBX;
    INT8U          OSTCBY;
    INT8U          OSTCBBitX;
    INT8U          OSTCBBitY;

    BOOLEAN        OSTCBDelReq;        // Flag to tell task to delete itself

} OS_TCB;

Time Management

Function Prototypes:

void          OSTimeDly(INT16U ticks);

INT8U         OSTimeDlyHMSM(INT8U  hours, 
                            INT8U  minutes, 
                            INT8U  seconds, 
                            INT16U milli);

INT8U         OSTimeDlyResume(INT8U prio);

INT32U        OSTimeGet(void);

void          OSTimeSet(INT32U ticks);

void          OSTimeTick(void);

Semaphore Management

Function Prototypes:

INT16U        OSSemAccept(OS_EVENT *pevent);

OS_EVENT     *OSSemCreate(INT16U cnt);

OS_EVENT     *OSSemDel(OS_EVENT *pevent, INT8U opt, INT8U *err);

void          OSSemPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);

INT8U         OSSemPost(OS_EVENT *pevent);

INT8U         OSSemQuery(OS_EVENT *pevent, OS_SEM_DATA *pdata);

...

typedef struct {
    INT16U  OSCnt;                          // Semaphore count                                        
    INT8U   OSEventTbl[OS_EVENT_TBL_SIZE];  // Wait list
    INT8U   OSEventGrp;                     
} OS_SEM_DATA;

Mutual Exclusion Semaphore Management

Function Prototypes:

INT8U         OSMutexAccept(OS_EVENT *pevent, INT8U *err);
OS_EVENT     *OSMutexCreate(INT8U prio, INT8U *err);
OS_EVENT     *OSMutexDel(OS_EVENT *pevent, INT8U opt, INT8U *err);
void          OSMutexPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);
INT8U         OSMutexPost(OS_EVENT *pevent);
INT8U         OSMutexQuery(OS_EVENT *pevent, OS_MUTEX_DATA *pdata);

...

typedef struct {
    INT8U   OSEventTbl[OS_EVENT_TBL_SIZE]; // Wait List
    INT8U   OSEventGrp;                     
    INT8U   OSValue;                       // Mutex value 
                                           //      (0=used, 1=available)
    INT8U   OSOwnerPrio;                   // Mutex owner's task priority 
    INT8U   OSMutexPIP;                    // Priority Inheritance Priority or
                                           //      0xFF if no owner   
} OS_MUTEX_DATA;

Event Flags Management

Function Prototypes:

OS_FLAGS      OSFlagAccept(OS_FLAG_GRP *pgrp, 
                           OS_FLAGS     flags, 
                           INT8U        wait_type, 
                           INT8U       *err);

OS_FLAG_GRP  *OSFlagCreate(OS_FLAGS     flags, 
                           INT8U       *err);

OS_FLAG_GRP  *OSFlagDel(OS_FLAG_GRP    *pgrp, 
                        INT8U           opt, 
                        INT8U          *err);

OS_FLAGS      OSFlagPend(OS_FLAG_GRP   *pgrp,
                         OS_FLAGS       flags,
                         INT8U          wait_type,
                         INT16U         timeout,
                         INT8U         *err);

OS_FLAGS      OSFlagPost(OS_FLAG_GRP   *pgrp, 
                         OS_FLAGS       flags, 
                         INT8U          operation, 
                         INT8U         *err);

OS_FLAGS      OSFlagQuery(OS_FLAG_GRP  *pgrp, 
                          INT8U        *err);

...

OS_DEL_NO_PEND                             // Delete only if no task pending
OS_DEL_ALWAYS                              // Always delete

Message Mailbox Management

Function Prototypes:

void         *OSMboxAccept(OS_EVENT *pevent);

OS_EVENT     *OSMboxCreate(void *msg);

OS_EVENT     *OSMboxDel(OS_EVENT *pevent, INT8U opt, INT8U *err);

void         *OSMboxPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);

INT8U         OSMboxPost(OS_EVENT *pevent, void *msg);

INT8U         OSMboxPostOpt(OS_EVENT *pevent, void *msg, INT8U opt);

INT8U         OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata);

...

typedef struct {
    void   *OSMsg;                         // Pointer to message in mailbox                            
    INT8U   OSEventTbl[OS_EVENT_TBL_SIZE]; // Waiting List
    INT8U   OSEventGrp;                    
} OS_MBOX_DATA;

Message Queue Management

Function Prototypes:

void         *OSQAccept(OS_EVENT *pevent);
OS_EVENT     *OSQCreate(void **start, INT16U size);
OS_EVENT     *OSQDel(OS_EVENT *pevent, INT8U opt, INT8U *err);
INT8U         OSQFlush(OS_EVENT *pevent);
void         *OSQPend(OS_EVENT *pevent, INT16U timeout, INT8U *err);
INT8U         OSQPost(OS_EVENT *pevent, void *msg);
INT8U         OSQPostFront(OS_EVENT *pevent, void *msg);
INT8U         OSQPostOpt(OS_EVENT *pevent, void *msg, INT8U opt);
INT8U         OSQQuery(OS_EVENT *pevent, OS_Q_DATA *pdata);

...

typedef struct {
    void          *OSMsg;                          // Pointer to next message 
    INT16U         OSNMsgs;                        // # messages in queue                   
    INT16U         OSQSize;                        // Size of message queue
    INT8U          OSEventTbl[OS_EVENT_TBL_SIZE];  // Waiting List
    INT8U          OSEventGrp;
} OS_Q_DATA;

Memory Management

Function Prototypes:

OS_MEM       *OSMemCreate(void   *addr, 
                          INT32U  nblks, 
                          INT32U  blksize, 
                          INT8U  *err);
void         *OSMemGet(OS_MEM *pmem, INT8U *err);
INT8U         OSMemPut(OS_MEM *pmem, void *pblk);
INT8U         OSMemQuery(OS_MEM *pmem, OS_MEM_DATA *pdata);

...