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

📄 ucos_ii.asm

📁 基于TI的2407移植的ucos程序范例
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	MAR	*-
L46:
	.line	17
;>>>> 	    return (pevent);                             /* Return pointer to event control block              */
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	ZALS	* 
EPI0_19:
	.line	18
	MAR	* ,AR1
	SBRK	3
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	88,000000000H,2

	.sym	_OSMboxPend,_OSMboxPend,96,2,0
	.globl	_OSMboxPend

	.func	118
;>>>> 	void *OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
******************************************************
* FUNCTION DEF : _OSMboxPend
******************************************************
_OSMboxPend:

LF20	.set	0

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

	.sym	_pevent,-3+LF20,24,9,16,.fake0
	.sym	_timeout,-4+LF20,14,9,16
	.sym	_err,-5+LF20,28,9,16
	.sym	_msg,1,16,1,16
	.line	2
;>>>> 	    void  *msg;
	.line	6
;>>>> 	    OS_ENTER_CRITICAL();
	SETC INTM 
	.line	7
;>>>> 	    if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {  /* Validate event block type                     */
	MAR	* ,AR2
	LARK	AR2,-3+LF20
	MAR	*0+
	LAR	AR3,* ,AR3
	ADRK	4
	LAC	* 
	SUBK	1
	BZ	L47
	.line	8
;>>>> 	        OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	9
;>>>> 	        *err = OS_ERR_EVENT_TYPE;
	MAR	* ,AR2
	SBRK	2
	LAR	AR4,* ,AR4
	LACK	1
	SACL	* 
	.line	10
;>>>> 	        return ((void *)0);
	LACK	0
	B	EPI0_20
L47:
	.line	12
;>>>> 	    msg = pevent->OSEventPtr;
	SBRK	4
	LAC	* ,AR2
	ADRK	4-LF20
	SACL	* 
	.line	13
;>>>> 	    if (msg != (void *)0) {                           /* See if there is already a message             */
	LAC	* 
	BZ	L48
	.line	14
;>>>> 	        pevent->OSEventPtr = (void *)0;               /* Clear the mailbox                             */
	LACK	0
	MAR	* ,AR3
	SACL	* 
	.line	15
;>>>> 	        OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	16
;>>>> 	        *err = OS_NO_ERR;
	MAR	* ,AR2
	SBRK	6-LF20
	LAR	AR4,* ,AR4
	SACL	* 
	B	L49
L48:
	.line	17
;>>>> 	    } else if (OSIntNesting > 0) {                    /* See if called from ISR ...                    */
	LDPK	_OSIntNesting
	LAC	_OSIntNesting
	BZ	L50
	.line	18
;>>>> 	        OS_EXIT_CRITICAL();                           /* ... can't PEND from an ISR                    */
	CLRC INTM 
	.line	19
;>>>> 	        *err = OS_ERR_PEND_ISR;
;>>>> 	    } else {
	SBRK	6-LF20
	LAR	AR4,* ,AR4
	LACK	2
	SACL	* 
	B	L49
L50:
	.line	21
;>>>> 	        OSTCBCur->OSTCBStat |= OS_STAT_MBOX;          /* Message not available, task will pend         */
	LAR	AR4,_OSTCBCur
	MAR	* ,AR4
	ADRK	6
	LACK	2
	OR	* 
	SACL	* ,AR2
	.line	22
;>>>> 	        OSTCBCur->OSTCBDly   = timeout;               /* Load timeout in TCB                           */
	SBRK	5-LF20
	LAC	* ,AR4
	MAR	*-
	SACL	* ,AR1
	.line	23
;>>>> 	        OSEventTaskWait(pevent);                      /* Suspend task until event or timeout occurs    */
	SAR	AR3,*+
	CALL	_OSEventTaskWait
	MAR	*-
	.line	24
;>>>> 	        OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	25
;>>>> 	        OSSched();                                    /* Find next highest priority task ready to run  */
	CALL	_OSSched
	.line	26
;>>>> 	        OS_ENTER_CRITICAL();
	SETC INTM 
	.line	27
;>>>> 	        if ((msg = OSTCBCur->OSTCBMsg) != (void *)0) {     /* See if we were given the message         */
	LDPK	_OSTCBCur
	LAR	AR3,_OSTCBCur
	MAR	* ,AR3
	ADRK	4
	LAC	* ,AR2
	LARK	AR2,1
	MAR	*0+
	SACL	* 
	ANDK	0FFFFh
	BZ	L51
	.line	28
;>>>> 	            OSTCBCur->OSTCBMsg      = (void *)0;           /* Yes, clear message received              */
	LACK	0
	MAR	* ,AR3
	SACL	* 
	.line	29
;>>>> 	            OSTCBCur->OSTCBStat     = OS_STAT_RDY;
	ADRK	2
	SACL	* 
	.line	30
;>>>> 	            OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;       /* No longer waiting for event              */
	SBRK	3
	SACL	* 
	.line	31
;>>>> 	            OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	32
;>>>> 	            *err                    = OS_NO_ERR;
	MAR	* ,AR2
	SBRK	6-LF20
	LAR	AR4,* ,AR4
	SACL	* 
	B	L49
L51:
	.line	33
;>>>> 	        } else if (OSTCBCur->OSTCBStat & OS_STAT_MBOX) {   /* If status is not OS_STAT_RDY, timed out  */
	MAR	* ,AR3
	ADRK	2
	BIT	* ,14
	BBZ	L53
	.line	34
;>>>> 	            OSEventTO(pevent);                             /* Make task ready                          */
	MAR	* ,AR2
	SBRK	4-LF20
	LAC	* ,AR1
	SACL	*+
	CALL	_OSEventTO
	MAR	*-
	.line	35
;>>>> 	            OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	36
;>>>> 	            msg                     = (void *)0;           /* Set message contents to NULL             */
	LACK	0
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	SACL	* 
	.line	37
;>>>> 	            *err                    = OS_TIMEOUT;          /* Indicate that a timeout occured          */
;>>>> 	        } else {
	SBRK	6-LF20
	LAR	AR3,* ,AR3
	LACK	10
	SACL	* 
	B	L49
L53:
	.line	39
;>>>> 	            msg                     = pevent->OSEventPtr;  /* Message received                         */
	MAR	* ,AR2
	SBRK	4-LF20
	LAR	AR4,* ,AR4
	LAC	* ,AR2
	ADRK	4-LF20
	SACL	* ,AR4
	.line	40
;>>>> 	            pevent->OSEventPtr      = (void *)0;           /* Clear the mailbox                        */
	LACK	0
	SACL	* ,AR3
	.line	41
;>>>> 	            OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
	SBRK	3
	SACL	* 
	.line	42
;>>>> 	            OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	43
;>>>> 	            *err                    = OS_NO_ERR;
	MAR	* ,AR2
	SBRK	6-LF20
	LAR	AR5,* ,AR5
	SACL	* 
L49:
	.line	46
;>>>> 	    return (msg);                                          /* Return the message received (or NULL)    */
	MAR	* ,AR2
	ADRK	6-LF20
	ZALS	* 
EPI0_20:
	.line	47
	MAR	* ,AR1
	SBRK	3
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	164,000000000H,2

	.sym	_OSMboxPost,_OSMboxPost,44,2,0
	.globl	_OSMboxPost

	.func	184
;>>>> 	INT8U OSMboxPost (OS_EVENT *pevent, void *msg)
******************************************************
* FUNCTION DEF : _OSMboxPost
******************************************************
_OSMboxPost:

LF21	.set	0

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

	.sym	_pevent,-3+LF21,24,9,16,.fake0
	.sym	_msg,-4+LF21,16,9,16
	.line	2
	.line	3
;>>>> 	    OS_ENTER_CRITICAL();
	SETC INTM 
	.line	4
;>>>> 	    if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {  /* Validate event block type                     */
	MAR	* ,AR2
	LARK	AR2,-3+LF21
	MAR	*0+
	LAR	AR3,* ,AR3
	ADRK	4
	LAC	* 
	SUBK	1
	BZ	L54
	.line	5
;>>>> 	        OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	6
;>>>> 	        return (OS_ERR_EVENT_TYPE);
	LACK	1
	B	EPI0_21
L54:
	.line	8
;>>>> 	    if (pevent->OSEventGrp) {                         /* See if any task pending on mailbox            */
	MAR	*+
	LAC	* 
	BZ	L55
	.line	9
;>>>> 	        OSEventTaskRdy(pevent, msg, OS_STAT_MBOX);    /* Ready highest priority task waiting on event  */
	MAR	* ,AR1
	LACK	2
	SACL	*+,AR2
	MAR	*-
	LAC	* ,AR1
	SACL	*+,AR3
	SBRK	5
	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
L55:
	.line	14
;>>>> 	        if (pevent->OSEventPtr != (void *)0) {        /* Make sure mailbox doesn't already have a msg  */
	SBRK	5
	LAC	* 
	BZ	L56
	.line	15
;>>>> 	            OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	16
;>>>> 	            return (OS_MBOX_FULL);
;>>>> 	        } else {
	LACK	20
	B	EPI0_21
L56:
	.line	18
;>>>> 	            pevent->OSEventPtr = msg;                 /* Place message in mailbox                      */
	MAR	* ,AR2
	MAR	*-
	LAC	* ,AR3
	SACL	* 
	.line	19
;>>>> 	            OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	20
;>>>> 	            return (OS_NO_ERR);
	LACK	0
EPI0_21:
	.line	23
	MAR	* ,AR1
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	206,000000000H,1

	.sym	_OSMboxQuery,_OSMboxQuery,44,2,0
	.globl	_OSMboxQuery

	.func	224
;>>>> 	INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)
******************************************************
* FUNCTION DEF : _OSMboxQuery
******************************************************
_OSMboxQuery:

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_MBOX) {       /* Validate event block type                */
	MAR	* ,AR2
	LARK	AR2,-3+LF22
	MAR	*0+
	LAR	AR3,* ,AR3
	ADRK	4
	LAC	* 
	SUBK	1
	BZ	L57
	.line	10
;>>>> 	        OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	11
;>>>> 	        return (OS_ERR_EVENT_TYPE);
	LACK	1
	B	EPI0_22
L57:
	.line	13
;>>>> 	    pdata->OSEventGrp = pevent->OSEventGrp;                /* Copy message mailbox wait list           */
	MAR	*+,AR2
	MAR	*-
	LAR	AR4,* ,AR3
	LAC	* ,AR4
	ADRK	3
	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	* 
	ZALS	* 
	SUBK	2
	BGEZ	L59
	MAR	*+
L58:
	.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	* 
	ZALS	*+
	SUBK	2
	BLZ	L58
L59:
	.line	19
;>>>> 	    pdata->OSMsg = pevent->OSEventPtr;                     /* Get message from mailbox                 */
	LARK	AR2,-3+LF22
	MAR	*0+
	LAR	AR3,*-
	LAR	AR4,* ,AR3
	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	245,000000000H,4
	.file	"Os_sem.c"

	.sym	_OSSemAccept,_OSSemAccept,46,2,0
	.globl	_OSSemAccept

	.func	39
;>>>> 	INT16U OSSemAccept (OS_EVENT *pevent)
******************************************************
* FUNCTION DEF : _OSSemAccept
******************************************************
_OSSemAccept:

LF23	.set	0

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

	.sym	_pevent,-3+LF23,24,9,16,.fake0
	.sym	_cnt,1,14,1,16
	.line	2
;>>>> 	    INT16U cnt;
	.line	6
;>>>> 	    OS_ENTER_CRITICAL();
	SETC INTM 
	.line	7
;>>>> 	    if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                     */
	MAR	* ,AR2
	LARK	AR2,-3+LF23
	MAR	*0+
	LAR	AR3,* ,AR3
	ADRK	4
	LAC	* 
	SUBK	3
	BZ	L60
	.line	8
;>>>> 	        OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	9
;>>>> 	        return (0);
	LACK	0
	B	EPI0_23
L60:
	.line	11
;>>>> 	    cnt = pevent->OSEventCnt;
	MAR	*-
	LAC	* ,AR2
	ADRK	4-LF23
	SACL	* 
	.line	12
;>>>> 	    if (cnt > 0) {                                    /* See if resource is available                  */
	LAC	* 
	BZ	L61
	.line	13
;>>>> 	        pevent->OSEventCnt--;                         /* Yes, decrement semaphore and notify caller    */
	MAR	* ,AR3
	LAC	* 
	SUBK	1
	SACL	* 
L61:
	.line	15
;>>>> 	    OS_EXIT_CRITICAL();
	CLRC INTM 
	.line	16
;>>>> 	    return (cnt);                                     /* Return semaphore count                        */
	MAR	* ,AR2
	ZALS	* 
EPI0_23:
	.line	17
	MAR	* ,AR1
	SBRK	3
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	55,000000000H,2

	.sym	_OSSemCreate,_OSSemCreate,104,2,0,.fake0
	.globl	_OSSemCreate

	.func	75
;>>>> 	OS_EVENT *OSSemCreate (INT16U cnt)
******************************************************
* FUNCTION DEF : _OSSemCreate
******************************************************
_OSSemCreate:

LF24	.set	0

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

	.sym	_cnt,-3+LF24,14,9,16
	.sym	_pevent,1,24,1,16,.fake0
	.line	2
;>>>> 	    OS_EVENT *pevent;
	.line	6
;>>>> 	    OS_ENTER_CRITICAL();
	SETC INTM 
	.line	7
;>>>> 	    pevent = OSEventFreeList;                              /* Get next free event control block        */
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	BLKD	#_OSEventFreeList,* 
	.line	8
;>>>> 	    if (OSEventFreeList != (OS_EVENT *)0) {                /* See if pool of free ECB pool was empty   */
	LDP

⌨️ 快捷键说明

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