Table of Contents | ||
---|---|---|
|
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 | ||
---|---|---|
|
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);
...