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

📄 ucos_ii.asm

📁 uc/os在2407上的移植代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	LACK	2
	SACL	* 
	B	L49
L50:
	.line	16
;>>>> 	        OSTCBCur->OSTCBStat    |= OS_STAT_SEM;        /* Resource not available, pend on semaphore     */
	LAR	AR4,_OSTCBCur
	MAR	* ,AR4
	ADRK	5
	LACK	1
	OR	* 
	SACL	*-,AR2
	.line	17
;>>>> 	        OSTCBCur->OSTCBDly      = timeout;            /* Store pend timeout in TCB                     */
	LARK	AR2,-4+LF20
	MAR	*0+
	LAC	* ,AR4
	SACL	* ,AR3
	.line	18
;>>>> 	        OSEventTaskWait(pevent);                      /* Suspend task until event or timeout occurs    */
	SBRK	2
	MAR	* ,AR1
	SAR	AR3,*+
	CALL	_OSEventTaskWait
	MAR	*-
	.line	19
;>>>> 	        OS_EXIT_CRITICAL();
	clrc intm
	.line	20
;>>>> 	        OSSched();                                    /* Find next highest priority task ready         */
	CALL	_OSSched
	.line	21
;>>>> 	        OS_ENTER_CRITICAL();
	setc intm
	.line	22
;>>>> 	        if (OSTCBCur->OSTCBStat & OS_STAT_SEM) {      /* Must have timed out if still waiting for event*/
	LDPK	_OSTCBCur
	LAR	AR3,_OSTCBCur
	MAR	* ,AR3
	ADRK	5
	BIT	* ,15
	BBZ	L51
	.line	23
;>>>> 	            OSEventTO(pevent);
	MAR	* ,AR2
	LARK	AR2,-3+LF20
	MAR	*0+
	LAC	* ,AR1
	SACL	*+
	CALL	_OSEventTO
	MAR	*-
	.line	24
;>>>> 	            OS_EXIT_CRITICAL();
	clrc intm
	.line	25
;>>>> 	            *err = OS_TIMEOUT;                        /* Indicate that didn't get event within TO      */
;>>>> 	        } else {
	MAR	* ,AR2
	LARK	AR2,-5+LF20
	MAR	*0+
	LAR	AR3,* ,AR3
	LACK	10
	SACL	* 
	B	L49
L51:
	.line	27
;>>>> 	            OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
	LACK	0
	SBRK	2
	SACL	* 
	.line	28
;>>>> 	            OS_EXIT_CRITICAL();
	clrc intm
	.line	29
;>>>> 	            *err = OS_NO_ERR;
	MAR	* ,AR2
	LARK	AR2,-5+LF20
	MAR	*0+
	LAR	AR4,* ,AR4
	SACL	* 
L49:
EPI0_20:
	.line	32
	MAR	* ,AR1
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	155,000000000H,1

	.sym	_OSSemPost,_OSSemPost,44,2,0
	.globl	_OSSemPost

	.func	174
;>>>> 	INT8U OSSemPost (OS_EVENT *pevent)
******************************************************
* FUNCTION DEF : _OSSemPost
******************************************************
_OSSemPost:

LF21	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,3
	LAR	AR0,*0+

	.sym	_pevent,-3+LF21,24,9,16,.fake0
	.line	2
	.line	3
;>>>> 	    OS_ENTER_CRITICAL();
	setc intm
	.line	4
;>>>> 	    if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {        /* Validate event block type                */
	MAR	* ,AR2
	LARK	AR2,-3+LF21
	MAR	*0+
	LAR	AR3,* ,AR3
	ADRK	3
	LAC	* 
	SUBK	3
	BZ	L53
	.line	5
;>>>> 	        OS_EXIT_CRITICAL();
	clrc intm
	.line	6
;>>>> 	        return (OS_ERR_EVENT_TYPE);
	LACK	1
	B	EPI0_21
L53:
	.line	8
;>>>> 	    if (pevent->OSEventGrp) {                              /* See if any task waiting for semaphore    */
	MAR	*+
	LAC	* 
	BZ	L54
	.line	9
;>>>> 	        OSEventTaskRdy(pevent, (void *)0, OS_STAT_SEM);    /* Ready highest prio task waiting on event */
	MAR	* ,AR1
	LACK	1
	SACL	*+
	LACK	0
	SACL	*+,AR3
	SBRK	4
	MAR	* ,AR1
	SAR	AR3,*+
	CALL	_OSEventTaskRdy
	SBRK	3
	.line	10
;>>>> 	        OS_EXIT_CRITICAL();
	clrc intm
	.line	11
;>>>> 	        OSSched();                                    /* Find highest priority task ready to run       */
	CALL	_OSSched
	.line	12
;>>>> 	        return (OS_NO_ERR);
;>>>> 	    } else {
	LACK	0
	B	EPI0_21
L54:
	.line	14
;>>>> 	        if (pevent->OSEventCnt < 65535) {             /* Make sure semaphore will not overflow         */
	SBRK	2
	ZALS	* 
	BNV	$+2
	MAR	* ,AR2
	ADRK	4-LF21
	SACL	*+
	SACH	*-
	LT	*+
	MPYK	1
	LPH	* 
	RSXM
	LACK	65535
	SPAC
	BNV	$+6
	BGZ	L55
	B	$+4
	BLEZ	L55
	.line	15
;>>>> 	            pevent->OSEventCnt++;                     /* Increment semaphore count to register event   */
	MAR	* ,AR3
	LAC	* 
	ADDK	1
	SACL	* 
	.line	16
;>>>> 	            OS_EXIT_CRITICAL();
	clrc intm
	.line	17
;>>>> 	            return (OS_NO_ERR);
;>>>> 	        } else {                                      /* Semaphore value has reached its maximum       */
	LACK	0
	B	EPI0_21
L55:
	.line	19
;>>>> 	            OS_EXIT_CRITICAL();
	clrc intm
	.line	20
;>>>> 	            return (OS_SEM_OVF);
	LACK	50
EPI0_21:
	.line	23
	MAR	* ,AR1
	SBRK	4
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	196,000000000H,3

	.sym	_OSSemQuery,_OSSemQuery,44,2,0
	.globl	_OSSemQuery

	.func	214
;>>>> 	INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *pdata)
******************************************************
* FUNCTION DEF : _OSSemQuery
******************************************************
_OSSemQuery:

LF22	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,4
	LAR	AR0,*0+

	.sym	_pevent,-3+LF22,24,9,16,.fake0
	.sym	_pdata,-4+LF22,24,9,16,.fake1
	.sym	_i,1,12,1,16
	.sym	_psrc,2,28,1,16
	.sym	_pdest,3,28,1,16
	.line	2
;>>>> 	    INT8U  i;
;>>>> 	    INT8U *psrc;
;>>>> 	    INT8U *pdest;
	.line	8
;>>>> 	    OS_ENTER_CRITICAL();
	setc intm
	.line	9
;>>>> 	    if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {        /* Validate event block type                */
	MAR	* ,AR2
	LARK	AR2,-3+LF22
	MAR	*0+
	LAR	AR3,* ,AR3
	ADRK	3
	LAC	* 
	SUBK	3
	BZ	L56
	.line	10
;>>>> 	        OS_EXIT_CRITICAL();
	clrc intm
	.line	11
;>>>> 	        return (OS_ERR_EVENT_TYPE);
	LACK	1
	B	EPI0_22
L56:
	.line	13
;>>>> 	    pdata->OSEventGrp = pevent->OSEventGrp;                /* Copy message mailbox wait list           */
	MAR	*+,AR2
	MAR	*-
	LAR	AR4,* ,AR3
	LAC	* ,AR4
	ADRK	2
	SACL	* ,AR2
	.line	14
;>>>> 	    psrc              = &pevent->OSEventTbl[0];
	MAR	*+
	LAC	* 
	ADDK	1
	ADRK	5-LF22
	SACL	* 
	.line	15
;>>>> 	    pdest             = &pdata->OSEventTbl[0];
	SBRK	6-LF22
	LAC	* 
	ADDK	1
	ADRK	7-LF22
	SACL	* 
	.line	16
;>>>> 	    for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
	LACK	0
	SBRK	2
	SACL	* 
	LAC	* 
	BNZ	L58
	MAR	*+
L57:
	.line	17
;>>>> 	        *pdest++ = *psrc++;   
	LAR	AR3,*+
	LAR	AR4,*-,AR3
	LAC	*+,AR2
	SAR	AR3,*+,AR4
	SACL	*+,AR2
	SAR	AR4,* 
	.line	16
	SBRK	2
	LAC	* 
	ADDK	1
	SACL	* 
	LAC	*+
	BZ	L57
L58:
	.line	19
;>>>> 	    pdata->OSCnt      = pevent->OSEventCnt;                /* Get semaphore count                      */
	LARK	AR2,-3+LF22
	MAR	*0+
	LAR	AR3,*-
	LAR	AR4,* ,AR3
	ADRK	2
	LAC	* ,AR4
	SACL	* 
	.line	20
;>>>> 	    OS_EXIT_CRITICAL();
	clrc intm
	.line	21
;>>>> 	    return (OS_NO_ERR);
	LACK	0
EPI0_22:
	.line	22
	MAR	* ,AR1
	SBRK	5
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	235,000000000H,4
	.file	"os_task.c"

	.sym	_OSDummy,_OSDummy,32,3,0

	.func	43
;>>>> 	static void  OSDummy (void)
******************************************************
* FUNCTION DEF : _OSDummy
******************************************************
_OSDummy:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+

EPI0_23:
	.line	3
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	45,000000000H,1

	.sym	_OSTaskCreate,_OSTaskCreate,44,2,0
	.globl	_OSTaskCreate

	.func	173
;>>>> 	INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
******************************************************
* FUNCTION DEF : _OSTaskCreate
******************************************************
_OSTaskCreate:

LF24	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,3
	LAR	AR0,*0+,AR2

	.sym	_task,-3+LF24,144,9,16
	.sym	_pdata,-4+LF24,16,9,16
	.sym	_ptos,-5+LF24,30,9,16
	.sym	_prio,-6+LF24,12,9,16
	.sym	_psp,1,16,1,16
	.sym	_err,2,12,1,16
	.line	2
;>>>> 	    void   *psp;
;>>>> 	    INT8U   err;
	.line	7
;>>>> 	    if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range           */
	LARK	AR2,-6+LF24
	MAR	*0+
	ZALS	* 
	SUBK	3
	BLEZ	L59
	.line	8
;>>>> 	        return (OS_PRIO_INVALID);
	LACK	42
	B	EPI0_24
L59:
	.line	10
;>>>> 	    OS_ENTER_CRITICAL();
	setc intm
	.line	11
;>>>> 	    if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority  */
	ADLK	_OSTCBPrioTbl+3,0
	MAR	* ,AR0
	SACL	* 
	LAR	AR3,* ,AR3
	LAC	* 
	BNZ	L60
	.line	12
;>>>> 	        OSTCBPrioTbl[prio] = (OS_TCB *)1;    /* Reserve the priority to prevent others from doing ...  */
	MAR	* ,AR2
	LAC	* ,AR0
	ADLK	_OSTCBPrioTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR3
	LACK	1
	SACL	* 
	.line	14
;>>>> 	        OS_EXIT_CRITICAL();
	clrc intm
	.line	15
;>>>> 	        psp = (void *)OSTaskStkInit(task, pdata, ptos, 0); /* Initialize the task's stack              */
	MAR	* ,AR1
	LACK	0
	SACL	*+,AR2
	MAR	*+
	LAC	*+,AR1
	SACL	*+,AR2
	LAC	*+,AR1
	SACL	*+,AR2
	LAC	* ,AR1
	SACL	*+
	CALL	_OSTaskStkInit
	SBRK	4
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	SACL	* ,AR1
	.line	16
;>>>> 	        err = OSTCBInit(prio, psp, (void *)0, 0, 0, (void *)0, 0);         
	LACK	0
	SACL	*+
	SACL	*+
	SACL	*+
	SACL	*+
	SACL	*+,AR2
	LAC	* ,AR1
	SACL	*+,AR2
	SBRK	7-LF24
	LAC	* ,AR1
	SACL	*+
	CALL	_OSTCBInit
	SBRK	7
	MAR	* ,AR2
	LARK	AR2,2
	MAR	*0+
	SACL	* 
	.line	17
;>>>> 	        if (err == OS_NO_ERR) {
	LAC	* 
	BNZ	L61
	.line	18
;>>>> 	            OS_ENTER_CRITICAL();
	setc intm
	.line	19
;>>>> 	            OSTaskCtr++;                                   /* Increment the #tasks counter             */
	LDPK	_OSTaskCtr
	LAC	_OSTaskCtr
	ADDK	1
	SACL	_OSTaskCtr
	.line	20
;>>>> 	            OSTaskCreateHook(OSTCBPrioTbl[prio]);          /* Call user defined hook                   */
	SBRK	8-LF24
	LAC	* ,AR0
	ADLK	_OSTCBPrioTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR3
	LAC	* ,AR1
	SACL	*+
	CALL	_OSTaskCreateHook
	MAR	*-
	.line	21
;>>>> 	            OS_EXIT_CRITICAL();
	clrc intm
	.line	22
;>>>> 	            if (OSRunning) {                 /* Find highest priority task if multitasking has started */
	LDPK	_OSRunning
	LAC	_OSRunning
	BZ	L63
	.line	23
;>>>> 	                OSSched();
;>>>> 	        } else {
	CALL	_OSSched
	B	L63
L61:
	.line	26
;>>>> 	            OS_ENTER_CRITICAL();
	setc intm
	.line	27
;>>>> 	            OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others                 */
	SBRK	8-LF24
	LAC	* ,AR0
	ADLK	_OSTCBPrioTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR3
	LACK	0
	SACL	* 
	.line	28
;>>>> 	            OS_EXIT_CRITICAL();
	clrc intm
L63:
	.line	30
;>>>> 	        return (err);
;>>>> 	    } else {
	MAR	* ,AR2
	LARK	AR2,2
	MAR	*0+
	ZALS	* 
	B	EPI0_24
L60:
	.line	32
;>>>> 	        OS_EXIT_CRITICAL();
	clrc intm
	.line	33
;>>>> 	        return (OS_PRIO_EXIST);
	LACK	40
EPI0_24:
	.line	35
	MAR	* ,AR1
	SBRK	4
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	207,000000000H,3

	.sym	_OSTaskQuery,_OSTaskQuery,44,2,0
	.globl	_OSTaskQuery

	.func	700
;>>>> 	INT8U OSTaskQuery (INT8U prio, OS_TCB *pdata)
******************************************************
* FUNCTION DEF : _OSTaskQuery
******************************************************
_OSTaskQuery:

LF25	.set	0

	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,2
	LAR	AR0,*0+,AR2

	.sym	_prio,-3+LF25,12,9,16
	.sym	_pdata,-4+LF25,24,9,16,_os_tcb
	.sym	_ptcb,1,24,1,16,_os_tcb
	.line	2
;>>>> 	    OS_TCB *ptcb;
	.line	6
;>>>> 	    if (prio > OS_LOWEST_PRIO && prio != OS_PRIO_SELF) {   /* Task priority valid ?                    */
	LARK	AR2,-3+LF25
	MAR	*0+
	ZALS	* 
	SUBK	3
	BLEZ	L64
	LAC	* 
	SUBK	255
	BZ	L64
	.line	7
;>>>> 	        return (OS_PRIO_INVALID);
	LACK	42
	B	EPI0_25
L64:
	.line	9
;>>>> 	    OS_ENTER_CRITICAL();
	setc intm
	.line	10
;>>>> 	    if (prio == OS_PRIO_SELF) {                            /* See if suspend SELF                      */
	LAC	* 
	SUBK	255
	BNZ	L65
	.line	11
;>>>> 	        prio = OSTCBCur->OSTCBPrio;
	LDPK	_OSTCBCur
	LAR	AR3,_OSTCBCur
	MAR	* ,AR3
	ADRK	6
	LAC	* ,AR2
	SACL	* 
L65:
	.line	13
;>>>> 	    if ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) {      /* Task to query must exist                 */
	LAC	* ,AR0
	ADLK	_OSTCBPrioTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR3
	LAC	* ,AR2
	ADRK	4-LF25
	SACL	* 
	ANDK	0FFFFh
	BNZ

⌨️ 快捷键说明

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