📄 ucos51.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"><HTML><HEAD> <TITLE>uCOS51 - Documentation</TITLE> <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.0.30 i486) [Netscape]"> <META NAME="Author" CONTENT="Gianpaolo Macario"> <META NAME="Keywords" CONTENT="uCOS 8051"></HEAD><BODY><H1>uC/OS-51 - Documentation</H1><ADDRESS>Author: <A HREF="http://www.geocities.com/SiliconValley/Pines/5004">GianpaoloMacario</A> <<A HREF="mailto:gianpi@geocities.com">gianpi@geocities.com</A>></ADDRESS><ADDRESS>$Id: ucos51.htm,v 1.3 1997/07/14 13:19:55 gianpi Exp $</ADDRESS><P><HR></P><H2>File Structure</H2><TABLE BORDER=1 CELLSPACING=0 CELLPADDING=0 ><TR><TD><B>Filename</B></TD><TD><B>Description</B></TD></TR><TR><TD><A HREF="includes.h">includes.h</A></TD><TD>Included by Test Programs</TD></TR><TR><TD><A HREF="readme.txt">readme.txt</A></TD><TD>Original documentation<BR>by Jean Labrosse (was read.me)</TD></TR><TR><TD><A HREF="test1.c">test1.c</A></TD><TD>Test Program #1 (MS-DOS)</TD></TR><TR><TD><A HREF="test2.c">test2.c</A></TD><TD>Test Program #2 (MS-DOS)</TD></TR><TR><TD><A HREF="ucos.c">ucos.c</A></TD><TD>Target-independent<BR>uC/OS Functions (Ansi C)</TD></TR><TR><TD><A HREF="ucos.h">ucos.h</A></TD><TD>Constants and prototypes<BR>for ucos.c</TD></TR><TR><TD><A HREF="ucos186a.asm">ucos186a.asm</A></TD><TD>Target-dependent (80x86)<BR>uC/OS Functions (ASM-86)</TD></TR><TR><TD><A HREF="ucos186c.c">ucos186c.c</A></TD><TD>Target-dependent (80x86)<BR>uC/OS Functions (Borland C)</TD></TR><TR><TD><A HREF="ucos186c.h">ucos186c.h</A></TD><TD>Constants and prototypes<BR>for ucos186a.asm and ucos186c.c</TD></TR><TR><TD><A HREF="ucos51.htm">ucos51.htm</A></TD><TD>Documentation for uC/OS-51 (this file)</TD></TR><TR><TD><A HREF="ucos51a.asm">ucos51a.asm</A></TD><TD>Target-dependent (8051)<BR>uC/OS Functions (ASM-51)</TD></TR><TR><TD><A HREF="ucos51c.c">ucos51c.c</A></TD><TD>Target-dependent (8051)<BR>uC/OS Functions (CC51)</TD></TR><TR><TD><A HREF="ucos51c.h">ucos51c.h</A></TD><TD>Constants and prototypes<BR>for ucos51a.asm and ucos51c.c</TD></TR></TABLE><P><HR WIDTH="100%"></P><H2>uC/OS Limits</H2><OL><LI>Maximum number of tasks: 64</LI><LI>Each task must have a different priority</LI></OL><H2>uC/OS System Declarations</H2><PRE>#define OS_LO_PRIO 63 /* IDLE task priority */ </PRE><H3>OS_Task_Status</H3><PRE>#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 */</PRE><H3>OS_Error_Code</H3><PRE>#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</PRE><H3>uC/OS Task Control Block Data Structure</H3><P>This structure must be accessed by assembler code as well (at leastfor OSTCBStkPtr), so OSTCBStkPtr must be allocated as the first field instructure.</P><PRE>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; </PRE><H3>Semaphore Data Structure</H3><PRE>typedef struct os_sem { WORD OSSemCnt; UBYTE OSSemGrp; UBYTE OSSemTbl[8]; } OS_SEM; </PRE><H3>Mailbox Data Structure </H3><PRE>typedef struct os_mbox { void *OSMboxMsg; UBYTE OSMboxGrp; UBYTE OSMboxTbl[8]; } OS_MBOX;</PRE><H3>Queue Data Structure </H3><PRE>typedef struct os_q { void **OSQStart; void **OSQEnd; void **OSQIn; void **OSQOut; UBYTE OSQSize; UBYTE OSQEntries; UBYTE OSQGrp; UBYTE OSQTbl[8]; } OS_Q;</PRE><H3>uC/OS Global Variables </H3><PRE>extern BOOLEAN OSRunning; /* TRUE if a task is running */</PRE><PRE>extern OS_TCB *OSTCBCur; /* Ptr to TCB of Current Running task */</PRE><PRE>extern OS_TCB *OSTCBHighRdy; /* Ptr to TCB of Highest Priority Task */</PRE><PRE>extern UBYTE OSRdyGrp; /* Bitmap with a 1 for each ready group */</PRE><PRE>extern UBYTE OSRdyTbl[]; /* Bitmap with a 1 for each ready Task */</PRE><PRE>extern OS_TCB *OSTCBPrioTbl[]; /* Priority Table (OS_MAX_PRIO elements) */</PRE><PRE>extern OS_TCB OSTCBTbl[]; /* TCB Table (OS_MAX_TASKS elements) */ </PRE><PRE>extern OS_TCB *OSTCBList; /* List of Task Control Blocks */</PRE><PRE>extern UBYTE OSLockNesting; /* Lock nesting level */ </PRE><PRE>extern UBYTE OSIntNesting; /* Interrupt nesting level */</PRE><PRE>extern OS_TCB *OSTCBFreeList; /* List of Free TCBs */</PRE><PRE>extern UBYTE _rom OSMapTbl[]; /* Table to quickly get... */</PRE><PRE>extern UBYTE _rom OSUnMapTbl[]; /* ... the Highest Priority Task */</PRE><H3>uC/OS Macros</H3><H4>Invoke the Task Switcher</H4><P>OS_TASK_SW()</P><H4>Enter a critical region (disable interrupts)</H4><P>OS_ENTER_CRITICAL()</P><H4>Exit a critical region (enable interrupts)</H4><P>OS_EXIT_CRITICAL()</P><H3>uCOS Functions - Alphabetical</H3><OL><LI><A HREF="#OSChangePrio">OSChangePrio</A></LI><LI><A HREF="#OSCtxSw">OSCtxSw</A></LI><LI><A HREF="#OSInit">OSInit</A></LI><LI><A HREF="#OSIntCtxSw">OSIntCtxSw</A></LI><LI><A HREF="#OSIntEnter">OSIntEnter</A></LI><LI><A HREF="#OSIntExit">OSIntExit</A></LI><LI><A HREF="#OSLock">OSLock</A></LI><LI><A HREF="#OSMboxInit">OSMboxInit</A></LI><LI><A HREF="#OSMboxPend">OSMboxPend</A></LI><LI><A HREF="#OSMboxPost">OSMboxPost</A></LI><LI><A HREF="#OSQInit">OSQInit</A></LI><LI><A HREF="#OSQPend">OSQPend</A></LI><LI><A HREF="#OSQPost">OSQPost</A></LI><LI><A HREF="#OSSched">OSSched</A></LI><LI><A HREF="#OSSemInit">OSSemInit</A></LI><LI><A HREF="#OSSemPend">OSSemPend</A></LI><LI><A HREF="#OSSemPost">OSSemPost</A></LI><LI><A HREF="#OSStart">OSStart</A></LI><LI><A HREF="#OSStartHighRdy">OSStartHighRdy</A></LI><LI><A HREF="#OSTCBGetFree">OSTCBGetFree</A></LI><LI><A HREF="#OSTCBPutFree">OSTCBPutFree</A></LI><LI><A HREF="#OSTaskCreate">OSTaskCreate</A></LI><LI><A HREF="#OSTaskDelete">OSTaskDelete</A></LI><LI><A HREF="#OSTickISR">OSTickISR</A></LI><LI><A HREF="#OSTimeDly">OSTimeDly</A></LI><LI><A HREF="#OSTimeTick">OSTimeTick</A></LI><LI><A HREF="#OSUnlock">OSUnlock</A></LI></OL><H3>uC/OS Function Descriptions </H3><H4><A NAME="OSInit"></A>uC/OS Initialization</H4><UL><LI>ucos-186 (ucos.c):</LI><PRE>void OSInit(void *idle_stk, UBYTE maxtasks); </PRE><LI>ucos-i386 (ucos.c):</LI><PRE>void OSInit(void *idle_stk, UBYTE maxtasks); </PRE></UL><H4><A NAME="OSStart"></A>Start Multitasking</H4><UL><LI>ucos-186 (ucos.c):</LI><PRE>void OSStart(void); </PRE><LI>ucos-i386 (ucos.c):</LI><PRE>void OSStart(void); </PRE></UL><H4><A NAME="OSTaskCreate"></A>Create Task</H4><P>Parameters:</P><UL><LI>task: Pointer to function implementing task</LI><LI>datap: Pointer to user data</LI><LI>pstk: Pointer to user stack</LI><LI>prio: Task priority</LI></UL><P>Return OS_Error_Code</P><UL><LI>ucos-6811 (ucos11c.c):</LI><PRE>UBYTE OSTaskCreate( void (far *task)(void *dptr), void *data, void *pstk, UBYTE p);</PRE><LI>ucos-cpu32 (ucosc32c.c):</LI><PRE>UBYTE OSTaskCreate( void (*task)(void *dptr), void *data, void *pstk, UBYTE p);</PRE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -