📄 task16.c
字号:
/*
**************************************************************************
* uCOS
* Microcomputer Real-Time Multitasking Operating System
*
* (c) Copyright 1992, Jean J. Labrosse, Plantation, FL
* All Rights Reserved
*
*
* MC68HC16 Specific code
*
* File : task16.C
* By : Gary Schneider
**************************************************************************
*/
#include "DEFS.H"
#include "UCOS.H"
/*
**************************************************************************
* CREATE A TASK
**************************************************************************
*/
UBYTE OSTaskCreate( void (*task) (void), 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 */
/* Load the PC */
/* RTI subtracts 6 bytes (3 words) from PC due to pipeline */
*--stk = (UWORD) (((ULONG) task)+4);
*--stk = (UWORD) (((ULONG) task)>>16); /* Load PK onto stack */
*--stk = (UWORD) ((ULONG) task); /* Place-holder since SP gets */
/* incr. by 2 by an RTI */
*--stk = (UWORD)0x0000; /* Accumulator D = 0 */
*--stk = (UWORD)0x0000; /* Accumulator E = 0 */
*--stk = (UWORD)0x0000; /* IX = 0 */
*--stk = (UWORD)0x0000; /* IY = 0 */
*--stk = (UWORD)0x0000; /* IZ = 0 */
*--stk = (UWORD)0x0000; /* XK,YK,ZK = 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -