Filename | Description |
includes.h | Included by Test Programs |
readme.txt | Original documentation by Jean Labrosse (was read.me) |
test1.c | Test Program #1 (MS-DOS) |
test2.c | Test Program #2 (MS-DOS) |
ucos.c | Target-independent uC/OS Functions (Ansi C) |
ucos.h | Constants and prototypes for ucos.c |
ucos186a.asm | Target-dependent (80x86) uC/OS Functions (ASM-86) |
ucos186c.c | Target-dependent (80x86) uC/OS Functions (Borland C) |
ucos186c.h | Constants and prototypes for ucos186a.asm and ucos186c.c |
ucos51.htm | Documentation for uC/OS-51 (this file) |
ucos51a.asm | Target-dependent (8051) uC/OS Functions (ASM-51) |
ucos51c.c | Target-dependent (8051) uC/OS Functions (CC51) |
ucos51c.h | Constants and prototypes for ucos51a.asm and ucos51c.c |
#define OS_LO_PRIO 63 /* IDLE task priority */
#define OS_STAT_RDY 0x00 /* Ready to run */ #define OS_STAT_MBOX 0x01 /* Pending on mailbox */ #define OS_STAT_SEM 0x02 /* Pending on semaphore */ #define OS_STAT_Q 0x04 /* Pending on queue */ #define OS_STAT_RES1 0x08 /* Reserved */ #define OS_STAT_RES2 0x10 /* Reserved */ #define OS_STAT_RES3 0x20 /* Reserved */ #define OS_STAT_RES4 0x40 /* Reserved */ #define OS_STAT_RES5 0x80 /* Reserved */
#define OS_NO_ERR 0 #define OS_TIMEOUT 10 #define OS_MBOX_FULL 20 #define OS_Q_FULL 30 #define OS_PRIO_EXIST 40 #define OS_SEM_ERR 50 #define OS_SEM_OVF 51
This structure must be accessed by assembler code as well (at least for OSTCBStkPtr), so OSTCBStkPtr must be allocated as the first field in structure.
typedef struct os_tcb { void *OSTCBStkPtr; UBYTE OSTCBStat; /* According to OS_Task_Status */ UBYTE OSTCBPrio; UWORD OSTCBDly; /* Delay in system ticks */ struct os_tcb *OSTCBNext; struct os_tcb *OSTCBPrev; } OS_TCB;
typedef struct os_sem { WORD OSSemCnt; UBYTE OSSemGrp; UBYTE OSSemTbl[8]; } OS_SEM;
typedef struct os_mbox { void *OSMboxMsg; UBYTE OSMboxGrp; UBYTE OSMboxTbl[8]; } OS_MBOX;
typedef struct os_q { void **OSQStart; void **OSQEnd; void **OSQIn; void **OSQOut; UBYTE OSQSize; UBYTE OSQEntries; UBYTE OSQGrp; UBYTE OSQTbl[8]; } OS_Q;
extern BOOLEAN OSRunning; /* TRUE if a task is running */
extern OS_TCB *OSTCBCur; /* Ptr to TCB of Current Running task */
extern OS_TCB *OSTCBHighRdy; /* Ptr to TCB of Highest Priority Task */
extern UBYTE OSRdyGrp; /* Bitmap with a 1 for each ready group */
extern UBYTE OSRdyTbl[]; /* Bitmap with a 1 for each ready Task */
extern OS_TCB *OSTCBPrioTbl[]; /* Priority Table (OS_MAX_PRIO elements) */
extern OS_TCB OSTCBTbl[]; /* TCB Table (OS_MAX_TASKS elements) */
extern OS_TCB *OSTCBList; /* List of Task Control Blocks */
extern UBYTE OSLockNesting; /* Lock nesting level */
extern UBYTE OSIntNesting; /* Interrupt nesting level */
extern OS_TCB *OSTCBFreeList; /* List of Free TCBs */
extern UBYTE _rom OSMapTbl[]; /* Table to quickly get... */
extern UBYTE _rom OSUnMapTbl[]; /* ... the Highest Priority Task */
OS_TASK_SW()
OS_ENTER_CRITICAL()
OS_EXIT_CRITICAL()
void OSInit(void *idle_stk, UBYTE maxtasks);
void OSInit(void *idle_stk, UBYTE maxtasks);
void OSStart(void);
void OSStart(void);
Parameters:
Return OS_Error_Code
UBYTE OSTaskCreate( void (far *task)(void *dptr), void *data, void *pstk, UBYTE p);
UBYTE OSTaskCreate( void (*task)(void *dptr), void *data, void *pstk, UBYTE p);
UBYTE OSTaskCreate( void (far *task)(void *dptr), void *data, void *pstk, UBYTE p);
void OSTimeDly(UWORD ticks);
void OSTimeDly(UWORD ticks);
void OSTimeTick(void);
void OSTimeTick(void);
void OSIntEnter(void);
void OSIntEnter(void);
void OSIntExit(void);
void OSIntExit(void);
void OSCtxSw(void);
void OSCtxSw(void);
void far OSCtxSw(void);
void OSIntCtxSw(void);
void OSIntCtxSw(void);
void OSIntCtxSw(void);
void far OSTickISR(void);
void OSTickISR(void);
void far OSTickISR(void);
void OSStartHighRdy(void);
void OSStartHighRdy(void);
void OSStartHighRdy(void);
void OSSched(void);
void OSSched(void);
OS_TCB *OSTCBGetFree(void);
OS_TCB *OSTCBGetFree(void);
UBYTE OSChangePrio(UBYTE newp);
UBYTE OSChangePrio(UBYTE newp);
void OSTaskDelete(void);
void OSTaskDelete(void);
void OSLock(void);
void OSLock(void);
void OSUnlock(void);
void OSUnlock(void);
UBYTE OSSemInit(OS_SEM *psem, WORD cnt);
UBYTE OSSemInit(OS_SEM *psem, WORD cnt);
UBYTE OSSemPost(OS_SEM *psem);
UBYTE OSSemPost(OS_SEM *psem);
UBYTE OSSemPend(OS_SEM *psem, UWORD timeout);
UBYTE OSSemPend(OS_SEM *psem, UWORD timeout);
UBYTE OSMboxInit(OS_MBOX *pmbox, void *msg);
UBYTE OSMboxInit(OS_MBOX *pmbox, void *msg);
UBYTE OSMboxPost(OS_MBOX *pmbox, void *msg);
UBYTE OSMboxPost(OS_MBOX *pmbox, void *msg);
void *OSMboxPend(OS_MBOX *pmbox, UWORD timeout, UBYTE *err);
void *OSMboxPend(OS_MBOX *pmbox, UWORD timeout, UBYTE *err);
UBYTE OSQInit(OS_Q *pq, void **start, UBYTE size);
UBYTE OSQInit(OS_Q *pq, void **start, UBYTE size);
UBYTE OSQPost(OS_Q *pq, void *msg);
UBYTE OSQPost(OS_Q *pq, void *msg);
void *OSQPend(OS_Q *pq, UWORD timeout, UBYTE *err);
void *OSQPend(OS_Q *pq, UWORD timeout, UBYTE *err);
Not implemented (coded in OSTaskDelete).
void OSTCBPutFree(OS_TCB *ptcb);