📄 ucos51c.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 + -