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

📄 ucos51c.c

📁 8051的UCOS实时操作系统(源代码)
💻 C
字号:
/* $Id: ucos51c.c,v 1.10 1997/07/14 13:20:25 gianpi Exp $
 *
 * Description:
 *	uC/OS-51 - Processor Dependent Module
 *
 * Author[s]:
 *	Jean Labrosse
 *	Gianpaolo Macario	gianpi@geocities.com
 *
 * Conditionalizations:
 *	_CC51			BSO-Tasking CC51 v4.0r0
 */

/*
***********************************************************
*                     INCLUDE FILES
***********************************************************
*/
#include "includes.h"

/*
***********************************************************
*                    CREATE A TASK
***********************************************************
*/
UBYTE OSTaskCreate(
	void _regparm _large (*task)(void *pd),
	void  *pdata,
	void  *pstk,
	UBYTE  p)
{
    _xdat OS_STK_TYPE *stk;
    UBYTE err;

    OS_ENTER_CRITICAL();
    if (OSTCBPrioTbl[p] == (OS_TCB *)0) {
	/* Avoid creating task if already exist */
        OS_EXIT_CRITICAL();

#if defined(_CC51)
        stk              = (OS_STK_TYPE *)pstk-1;
        *++stk           = ((UWORD)task & 0xFF);            	/* PCL */
        *++stk           = ((UWORD)task >> 8);              	/* PCH */
        *++stk           = 0x00;				/* PSW */
        *++stk           = 0x00;				/* ACC */
        *++stk           = 0x00;				/* B   */
        *++stk           = 0x00;				/* DPL */
        *++stk           = 0x00;				/* DPH */
        *++stk           = 0x00;				/* R0  */
        *++stk           = 0x00;				/* R1  */
        *++stk           = 0x00;				/* R2  */
        *++stk           = 0x00;				/* R3  */
        *++stk           = 0x00;				/* R4  */
        *++stk           = 0x00;				/* R5  */
        *++stk           = ((UWORD)pdata >> 8);			/* R6  */
        *++stk           = ((UWORD)pdata & 0xFF);		/* R7  */
        *++stk           = 0x00;				/* SP  */
#else
#error This piece of code only works with BSO-Tasking CC51 V4.0r0
#endif
        err = OSTCBInit(p, (void *)stk);    /* Get and initialize a TCB */
        if (err == OS_NO_ERR) {
            if (OSRunning) {
                /* Find highest priority task if multitasking has started */
                OSSched();
            }
        }
        return (err);
    } else {
        OS_EXIT_CRITICAL();
        return (OS_PRIO_EXIST);
    }
}	/* OSTaskCreate() */


/* === End of File === */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -