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

📄 ucos_ii.asm

📁 uC/OS-II 在TI TMS320C240上的移植代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	.sym	_y,1,14,1,16
	.line	10
;>>>> 	    if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Sched. only if all ISRs done & not locked    */
	LDPK	_OSIntNesting
	LAC	_OSIntNesting
	BNZ	L27
	LAC	_OSLockNesting
	BNZ	L27
	.line	11
;>>>> 	        y             = OSUnMapTbl[OSRdyGrp];          /* Get pointer to HPT ready to run              */
	LAC	_OSRdyGrp
	ADLK	_OSUnMapTbl+0,0
	MAR	* ,AR0
	SACL	* 
	LAR	AR3,* ,AR3
	LAC	* ,AR2
	LARK	AR2,1
	MAR	*0+
	SACL	* 
	.line	12
;>>>> 	        OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
	LAC	* ,AR0
	ADLK	_OSRdyTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR3
	LAC	* ,AR0
	ADLK	_OSUnMapTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR3
	LAC	* ,AR2
	ADD	* ,3
	SACL	_OSPrioHighRdy
	.line	13
;>>>> 	        if (OSPrioHighRdy != OSPrioCur) {              /* No Ctx Sw if current task is highest rdy     */
	LAC	_OSPrioHighRdy
	SUB	_OSPrioCur
	BZ	L27
	.line	14
;>>>> 	            OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
	LAC	_OSPrioHighRdy
	ADLK	_OSTCBPrioTbl+0,0
	MAR	* ,AR0
	SACL	* 
	LAR	AR3,* ,AR3
	BLDD	* ,#_OSTCBHighRdy
	.line	15
;>>>> 	            OSCtxSwCtr++;                              /* Increment context switch counter             */
	ZALS	_OSCtxSwCtr
	ADDH	_OSCtxSwCtr+1
	ADDK	1
	SACL	_OSCtxSwCtr
	SACH	_OSCtxSwCtr+1
	.line	16
;>>>> 	            OS_TASK_SW();                              /* Perform a context switch                     */
 INTR 31
L27:
	.line	19
;>>>> 	    OS_EXIT_CRITICAL();
 CLRC INTM
EPI0_16:
	.line	20
	MAR	* ,AR1
	SBRK	3
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	888,000000000H,2

	.sym	_OS_TaskIdle,_OS_TaskIdle,32,2,0
	.globl	_OS_TaskIdle

	.func	911
;>>>> 	void  OS_TaskIdle (void *pdata)
******************************************************
* FUNCTION DEF : _OS_TaskIdle
******************************************************
_OS_TaskIdle:

LF17	.set	0

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

	.sym	_pdata,-3+LF17,16,9,16
	.line	2
;>>>> 	#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;>>>> 	    OS_CPU_SR  cpu_sr;
;>>>> 	#endif    
	.line	8
;>>>> 	    pdata = pdata;                               /* Prevent compiler warning for not using 'pdata'     */
;>>>> 	    for (;;) {
L29:
	.line	10
;>>>> 	        OS_ENTER_CRITICAL();
 SETC INTM
	.line	11
;>>>> 	        OSIdleCtr++;
	LDPK	_OSIdleCtr
	ZALS	_OSIdleCtr
	ADDH	_OSIdleCtr+1
	ADDK	1
	SACL	_OSIdleCtr
	SACH	_OSIdleCtr+1
	.line	12
;>>>> 	        OS_EXIT_CRITICAL();
 CLRC INTM
	.line	13
;>>>> 	        OSTaskIdleHook();                        /* Call user definable HOOK                           */
	CALL	_OSTaskIdleHook,AR1
	.line	14
	B	L29
	.endfunc	925,000000000H,1

	.sym	_OS_TCBInit,_OS_TCBInit,46,2,0
	.globl	_OS_TCBInit

	.func	1035
;>>>> 	INT8U  OS_TCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt)
******************************************************
* FUNCTION DEF : _OS_TCBInit
******************************************************
_OS_TCBInit:

LF18	.set	0

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

	.sym	_prio,-3+LF18,14,9,16
	.sym	_ptos,-4+LF18,30,9,16
	.sym	_pbos,-5+LF18,30,9,16
	.sym	_id,-6+LF18,14,9,16
	.sym	_stk_size,-8+LF18,15,9,32
	.sym	_pext,-9+LF18,16,9,16
	.sym	_opt,-10+LF18,14,9,16
	.sym	_ptcb,1,24,1,16,_os_tcb
	.line	2
;>>>> 	#if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;>>>> 	    OS_CPU_SR  cpu_sr;
;>>>> 	#endif    
;>>>> 	    OS_TCB    *ptcb;
	.line	9
;>>>> 	    OS_ENTER_CRITICAL();
 SETC INTM
	.line	10
;>>>> 	    ptcb = OSTCBFreeList;                                  /* Get a free TCB from the free TCB list    */
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	BLKD	#_OSTCBFreeList,* 
	.line	11
;>>>> 	    if (ptcb != (OS_TCB *)0) {
	LAC	* 
	BZ	L30
	.line	12
;>>>> 	        OSTCBFreeList        = ptcb->OSTCBNext;            /* Update pointer to free TCB list          */
	LAR	AR3,* ,AR3
	MAR	*+
	BLDD	* ,#_OSTCBFreeList
	.line	13
;>>>> 	        OS_EXIT_CRITICAL();
 CLRC INTM
	.line	14
;>>>> 	        ptcb->OSTCBStkPtr    = ptos;                       /* Load Stack pointer in TCB                */
	MAR	* ,AR2
	SBRK	5-LF18
	LAC	*+,AR3
	MAR	*-
	SACL	* ,AR2
	.line	15
;>>>> 	        ptcb->OSTCBPrio      = (INT8U)prio;                /* Load task priority into TCB              */
	LAC	* ,AR3
	ADRK	6
	SACL	*-
	.line	16
;>>>> 	        ptcb->OSTCBStat      = OS_STAT_RDY;                /* Task is ready to run                     */
	LACK	0
	SACL	*-
	.line	17
;>>>> 	        ptcb->OSTCBDly       = 0;                          /* Task is not delayed                      */
;>>>> 	#if OS_TASK_CREATE_EXT_EN > 0
;>>>> 	        ptcb->OSTCBExtPtr    = pext;                       /* Store pointer to TCB extension           */
;>>>> 	        ptcb->OSTCBStkSize   = stk_size;                   /* Store stack size                         */
;>>>> 	        ptcb->OSTCBStkBottom = pbos;                       /* Store pointer to bottom of stack         */
;>>>> 	        ptcb->OSTCBOpt       = opt;                        /* Store task options                       */
;>>>> 	        ptcb->OSTCBId        = id;                         /* Store task ID                            */
;>>>> 	#else
	SACL	* ,AR2
	.line	26
;>>>> 	        pext                 = pext;                       /* Prevent compiler warning if not used     */
	.line	27
;>>>> 	        stk_size             = stk_size;
	.line	28
;>>>> 	        pbos                 = pbos;
	.line	29
;>>>> 	        opt                  = opt;
	.line	30
;>>>> 	        id                   = id;
;>>>> 	#endif
;>>>> 	#if OS_TASK_DEL_EN > 0
;>>>> 	        ptcb->OSTCBDelReq    = OS_NO_ERR;
;>>>> 	#endif
	.line	37
;>>>> 	        ptcb->OSTCBY         = prio >> 3;                  /* Pre-compute X, Y, BitX and BitY          */
	RSXM
	LAC	* ,12,AR3
	ADRK	4
	SACH	* ,1
	.line	38
;>>>> 	        ptcb->OSTCBBitY      = OSMapTbl[ptcb->OSTCBY];
	LAC	* ,AR0
	ADLK	_OSMapTbl+0,0
	SACL	* 
	LAR	AR4,* ,AR4
	LAC	* ,AR3
	ADRK	2
	SACL	* ,AR2
	.line	39
;>>>> 	        ptcb->OSTCBX         = prio & 0x07;
	LACK	7
	AND	* ,AR3
	SBRK	3
	SACL	* 
	.line	40
;>>>> 	        ptcb->OSTCBBitX      = OSMapTbl[ptcb->OSTCBX];
;>>>> 	#if OS_EVENT_EN > 0
	LAC	* ,AR0
	ADLK	_OSMapTbl+0,0
	SACL	* 
	LAR	AR4,* ,AR4
	LAC	* ,AR3
	ADRK	2
	SACL	* 
	.line	43
;>>>> 	        ptcb->OSTCBEventPtr  = (OS_EVENT *)0;              /* Task is not pending on an event          */
;>>>> 	#endif
;>>>> 	#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) && (OS_TASK_DEL_EN > 0)
;>>>> 	        ptcb->OSTCBFlagNode  = (OS_FLAG_NODE *)0;          /* Task is not pending on an event flag     */
;>>>> 	#endif
;>>>> 	#if (OS_MBOX_EN > 0) || ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
;>>>> 	        ptcb->OSTCBMsg       = (void *)0;                  /* No message received                      */
;>>>> 	#endif
;>>>> 	#if OS_VERSION >= 204
	LACK	0
	SBRK	6
	SACL	* 
	.line	55
;>>>> 	        OSTCBInitHook(ptcb);
;>>>> 	#endif
	SBRK	3
	MAR	* ,AR1
	SAR	AR3,*+
	CALL	_OSTCBInitHook
	MAR	*-,AR2
	.line	58
;>>>> 	        OSTaskCreateHook(ptcb);                            /* Call user defined hook                   */
	LARK	AR2,1
	MAR	*0+
	LAC	* ,AR1
	SACL	*+
	CALL	_OSTaskCreateHook
	MAR	*-
	.line	60
;>>>> 	        OS_ENTER_CRITICAL();
 SETC INTM
	.line	61
;>>>> 	        OSTCBPrioTbl[prio] = ptcb;
	MAR	* ,AR2
	LARK	AR2,-3+LF18
	MAR	*0+
	LAC	* ,AR0
	ADLK	_OSTCBPrioTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR2
	ADRK	4-LF18
	LAC	* ,AR3
	SACL	* ,AR2
	.line	62
;>>>> 	        ptcb->OSTCBNext    = OSTCBList;                    /* Link into TCB chain                      */
	LAR	AR3,* ,AR3
	MAR	*+
	BLKD	#_OSTCBList,*+
	.line	63
;>>>> 	        ptcb->OSTCBPrev    = (OS_TCB *)0;
	LACK	0
	SACL	* 
	.line	64
;>>>> 	        if (OSTCBList != (OS_TCB *)0) {
	LDPK	_OSTCBList
	LAC	_OSTCBList
	BZ	L31
	.line	65
;>>>> 	            OSTCBList->OSTCBPrev = ptcb;
	LAR	AR4,_OSTCBList
	SBRK	2
	MAR	* ,AR4
	ADRK	2
	SAR	AR3,* 
L31:
	.line	67
;>>>> 	        OSTCBList               = ptcb;
	MAR	* ,AR2
	BLDD	* ,#_OSTCBList
	.line	68
;>>>> 	        OSRdyGrp               |= ptcb->OSTCBBitY;         /* Make task ready to run                   */
	LAR	AR3,* ,AR3
	LAC	_OSRdyGrp
	ADRK	10
	OR	* ,AR2
	SACL	_OSRdyGrp
	.line	69
;>>>> 	        OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
	LAR	AR4,* ,AR4
	ADRK	8
	LAC	* ,AR0
	ADLK	_OSRdyTbl+0,0
	SACL	* 
	LAR	AR5,* ,AR5
	LAC	* ,AR3
	MAR	*-
	OR	* ,AR5
	SACL	* 
	.line	70
;>>>> 	        OS_EXIT_CRITICAL();
 CLRC INTM
	.line	71
;>>>> 	        return (OS_NO_ERR);
	LACK	0
	B	EPI0_18
L30:
	.line	73
;>>>> 	    OS_EXIT_CRITICAL();
 CLRC INTM
	.line	74
;>>>> 	    return (OS_NO_MORE_TCB);
	LACK	70
EPI0_18:
	.line	75
	MAR	* ,AR1
	SBRK	3
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	1109,000000000H,2
	.file	"os_sem.c"

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

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

LF19	.set	0

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

	.sym	_cnt,-3+LF19,14,9,16
	.sym	_pevent,1,24,1,16,.fake0
	.line	2
;>>>> 	#if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;>>>> 	    OS_CPU_SR  cpu_sr;
;>>>> 	#endif    
;>>>> 	    OS_EVENT  *pevent;
	.line	9
;>>>> 	    if (OSIntNesting > 0) {                                /* See if called from ISR ...               */
	LDPK	_OSIntNesting
	LAC	_OSIntNesting
	BZ	L32
	.line	10
;>>>> 	        return ((OS_EVENT *)0);                            /* ... can't CREATE from an ISR             */
	LACK	0
	B	EPI0_19
L32:
	.line	12
;>>>> 	    OS_ENTER_CRITICAL();
 SETC INTM
	.line	13
;>>>> 	    pevent = OSEventFreeList;                              /* Get next free event control block        */
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	BLKD	#_OSEventFreeList,* 
	.line	14
;>>>> 	    if (OSEventFreeList != (OS_EVENT *)0) {                /* See if pool of free ECB pool was empty   */
	LAC	_OSEventFreeList
	BZ	L33
	.line	15
;>>>> 	        OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
	LAR	AR3,_OSEventFreeList
	MAR	* ,AR3
	ADRK	3
	BLDD	* ,#_OSEventFreeList
L33:
	.line	17
;>>>> 	    OS_EXIT_CRITICAL();
 CLRC INTM
	.line	18
;>>>> 	    if (pevent != (OS_EVENT *)0) {                         /* Get an event control block               */
	MAR	* ,AR2
	LAC	* 
	BZ	L34
	.line	19
;>>>> 	        pevent->OSEventType = OS_EVENT_TYPE_SEM;
	LAR	AR3,* ,AR3
	LACK	3
	SACL	* ,AR2
	.line	20
;>>>> 	        pevent->OSEventCnt  = cnt;                         /* Set semaphore value                      */
	SBRK	4-LF19
	LAC	* ,AR3
	ADRK	2
	SACL	*+
	.line	21
;>>>> 	        pevent->OSEventPtr  = (void *)0;                   /* Unlink from ECB free list                */
	LACK	0
	SACL	* 
	.line	22
;>>>> 	        OS_EventWaitListInit(pevent);                      /* Initialize to 'nobody waiting' on sem.   */
	SBRK	3
	MAR	* ,AR1
	SAR	AR3,*+
	CALL	_OS_EventWaitListInit
	MAR	*-
L34:
	.line	24
;>>>> 	    return (pevent);
	MAR	* ,AR2
	LARK	AR2,1
	MAR	*0+
	ZALS	* 
EPI0_19:
	.line	25
	MAR	* ,AR1
	SBRK	3
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	107,000000000H,2

	.sym	_OSSemPend,_OSSemPend,32,2,0
	.globl	_OSSemPend

	.func	244
;>>>> 	void  OSSemPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
******************************************************
* FUNCTION DEF : _OSSemPend
******************************************************
_OSSemPend:

LF20	.set	0

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

	.sym	_pevent,-3+LF20,24,9,16,.fake0
	.sym	_timeout,-4+LF20,14,9,16
	.sym	_err,-5+LF20,30,9,16
	.line	2
;>>>> 	#if OS_CRITICAL_METHOD == 3                           /* Allocate storage for CPU status register      */
;>>>> 	    OS_CPU_SR  cpu_sr;
;>>>> 	#endif    
	.line	8
;>>>> 	    if (OSIntNesting > 0) {                           /* See if called from ISR ...                    */
	LDPK	_OSIntNesting
	LAC	_OSIntNesting
	BZ	L35
	.line	9
;>>>> 	        *err = OS_ERR_PEND_ISR;                       /* ... can't PEND from an ISR                    */
	MAR	* ,AR2
	LARK	AR2,-5+LF20
	MAR	*0+
	LAR	AR3,* ,AR3
	LACK	2
	SACL	* 
	.line	10
;>>>> 	        return;
;>>>> 	#if OS_ARG_CHK_EN > 0
	B	EPI0_20
L35:
	.line	13
;>>>> 	    if (pevent == (OS_EVENT *)0) {                    /* Validate 'pevent'                             */
	MAR	* ,AR2
	LARK	AR2,-3+LF20
	MAR	*0+
	LAC	* 
	BNZ	L36
	.line	14
;>>>> 	        *err = OS_ERR_PEVENT_NULL;
	SBRK	2
	LAR	AR3,* ,AR3
	LACK	4
	SACL	* 
	.line	15
;>>>> 	        return;
	B	EPI0_20
L36:
	.line	17
;>>>> 	    if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                     */
	LAR	AR3,* ,AR3
	LAC	* 
	SUBK	3
	BZ	L37
	.line	18
;>>>> 	        *err = OS_ERR_EVENT_TYPE;
	MAR	* ,AR2
	SBRK	2
	LAR	AR4,* ,AR4
	LACK	1
	SACL	* 
	.line	19
;>>>> 	        return;
;>>>> 	#endif
	B	EPI0_20
L37:
	.line	22
;>>>> 	    OS_ENTER_CRITICAL();
 SETC INTM
	.line	23
;>>>> 	    if (pevent->OSEventCnt > 0) {                     /* If sem. is positive, resource available ...   */
	ADRK	2
	LAC	* 
	BZ	L38
	.line	24
;>>>> 	        pevent->OSEventCnt--;                         /* ... decrement semaphore only if positive.     */
	LAC	* 
	SUBK	1
	SACL	* 
	.line	25
;>>>> 	        OS_EXIT_CRITICAL();
 CLRC INTM
	.line	26
;>>>> 	        *err = OS_NO_ERR;
	MAR	* ,AR2
	SBRK	2
	LAR	AR4,* ,AR4
	LACK	0
	SACL	* 
	.line	27
;>>>> 	        return;
	B	EPI0_20
L38:
	.line	30
;>>>> 	    OSTCBCur->OSTCBStat |= OS_STAT_SEM;               /* Resource not available, pend on semaphore     */
	LAR	AR4,_OSTCBCur
	MAR	* ,AR4
	ADRK	5
	LACK	1
	OR	* 
	SACL	*-,AR2
	.line	31
;>>>> 	    OSTCBCur->OSTCBDly   = timeout;                   /* Store pend timeout in TCB                     */
	MAR	*-
	LAC	* ,AR4
	SACL	* ,AR3
	.line	32
;>>>> 	    OS_EventTaskWait(pevent);                         /* Suspend task until event or timeout occurs    */
	SBRK	2
	MAR	* ,AR1
	SAR	AR3,*+
	CALL	_OS_EventTaskWait
	MAR	*-
	.line	33
;>>>> 	    OS_EXIT_CRITICAL();
 CLRC INTM
	.line	34
;>>>> 	    OS_Sched();                                       /* Find next highest priority task ready         */
	CALL	_OS_Sched
	.line	35
;>>>> 	    OS_ENTER_CRITICAL();
 SETC INTM
	.line	36
;>>>> 	    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

⌨️ 快捷键说明

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