⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucos51.htm

📁 8051的UCOS实时操作系统(源代码)
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!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> &lt;<A HREF="mailto:gianpi@geocities.com">gianpi@geocities.com</A>&gt;</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&nbsp;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&nbsp;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;         /*&nbsp;According to OS_Task_Status */    UBYTE          OSTCBPrio;     UWORD          OSTCBDly;          /*&nbsp;Delay in system ticks&nbsp;*/    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;            /*&nbsp;TRUE&nbsp;if a task is running             */</PRE><PRE>extern OS_TCB  *OSTCBCur;             /*&nbsp;Ptr to TCB&nbsp;of Current Running task    */</PRE><PRE>extern OS_TCB  *OSTCBHighRdy;         /*&nbsp;Ptr to TCB&nbsp;of Highest Priority Task   */</PRE><PRE>extern UBYTE    OSRdyGrp;             /*&nbsp;Bitmap with a 1 for each ready group  */</PRE><PRE>extern UBYTE    OSRdyTbl[];           /*&nbsp;Bitmap with a 1 for each ready Task   */</PRE><PRE>extern OS_TCB  *OSTCBPrioTbl[];       /*&nbsp;Priority Table (OS_MAX_PRIO elements)&nbsp;*/</PRE><PRE>extern OS_TCB   OSTCBTbl[];           /*&nbsp;TCB Table (OS_MAX_TASKS elements)&nbsp;    */ </PRE><PRE>extern OS_TCB  *OSTCBList;            /*&nbsp;List of Task Control Blocks &nbsp;         */</PRE><PRE>extern UBYTE    OSLockNesting;        /*&nbsp;Lock nesting level                    */ </PRE><PRE>extern UBYTE    OSIntNesting;         /*&nbsp;Interrupt nesting level               */</PRE><PRE>extern OS_TCB  *OSTCBFreeList;        /*&nbsp;List of Free TCBs                     */</PRE><PRE>extern UBYTE _rom OSMapTbl[];         /*&nbsp;Table to quickly get...               */</PRE><PRE>extern UBYTE _rom OSUnMapTbl[];       /*&nbsp;... 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&nbsp;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:&nbsp;Pointer to function implementing task</LI><LI>datap:&nbsp;Pointer to user data</LI><LI>pstk:&nbsp;Pointer to user stack</LI><LI>prio:&nbsp;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 + -