z80_c.c

来自「ucos在z80上的移植」· C语言 代码 · 共 55 行

C
55
字号
/*
*********************************************************************************************************
*                                                uC/OS
*                        Microcomputer Real-Time Multitasking Operating System
*
*                         (c) Copyright 1994, Jean J. Labrosse, Plantation, FL
*                                          All Rights Reserved
*
*
*                                          Z-80 Specific code
*
* File : Z80_C.C
* By   : Jean J. Labrosse
*********************************************************************************************************
*/

#include "INCLUDES.H"

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


    OS_ENTER_CRITICAL();
    if (OSTCBPrioTbl[p] == (OS_TCB *)0) {   /* Make sure task doesn't already exist at this priority   */
        OS_EXIT_CRITICAL();
        stk    = (UWORD *)pstk;             /* Load stack pointer                                      */
        *--stk = (UWORD)pdata;              /* Simulate call to function with argument                 */
        *--stk = (UWORD)task;
        *--stk = (UWORD)task;               /* Put pointer to task   on top of stack                   */
        *--stk = (UWORD)0x0000;             /* AF = 0                                                  */
        *--stk = (UWORD)0x0000;             /* BC = 0                                                  */
        *--stk = (UWORD)0x0000;             /* DE = 0                                                  */
        *--stk = (UWORD)0x0000;             /* HL = 0                                                  */
        *--stk = (UWORD)0x0000;             /* IX = 0                                                  */
        *--stk = (UWORD)0x0000;             /* IY = 0                                                  */
        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);
    }
}

⌨️ 快捷键说明

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