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

📄 ucos_ii.asm

📁 uc/os在2407上的移植代码
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	.endfunc	132,000000000H,7

	.sym	_OSEventTaskWait,_OSEventTaskWait,32,2,0
	.globl	_OSEventTaskWait

	.func	150
;>>>> 	void  OSEventTaskWait (OS_EVENT *pevent)
******************************************************
* FUNCTION DEF : _OSEventTaskWait
******************************************************
_OSEventTaskWait:

LF2	.set	0

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

	.sym	_pevent,-3+LF2,24,9,16,.fake0
	.line	2
	.line	3
;>>>> 	    OSTCBCur->OSTCBEventPtr = pevent;            /* Store pointer to event control block in TCB        */
	LDPK	_OSTCBCur
	LAR	AR3,_OSTCBCur
	LARK	AR2,-3+LF2
	MAR	*0+
	LAC	* ,AR3
	ADRK	3
	SACL	* 
	.line	4
;>>>> 	    if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {      /* Task no longer ready      */
	ADRK	6
	ZALS	*-,AR1
	CMPL
	SACL	* ,AR3
	LAC	* ,AR0
	ADLK	_OSRdyTbl+0,0
	SACL	* 
	LAR	AR4,* ,AR1
	ZALS	* ,AR4
	AND	* 
	SACL	* 
	BNZ	L3
	.line	5
;>>>> 	        OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
	MAR	* ,AR3
	ADRK	2
	LAC	* 
	CMPL
	AND	_OSRdyGrp
	SACL	_OSRdyGrp
L3:
	.line	7
;>>>> 	    pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;          /* Put task in waiting list  */
	LAR	AR3,_OSTCBCur
	LAR	AR4,_OSTCBCur
	MAR	* ,AR2
	LAC	* ,AR4
	ADDK	1
	ADRK	8
	ADD	* ,AR0
	SACL	* 
	LAR	AR5,* ,AR5
	LAC	* ,AR3
	ADRK	9
	OR	* ,AR5
	SACL	* ,AR2
	.line	8
;>>>> 	    pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY;
	LAR	AR5,* ,AR5
	ADRK	4
	LAC	* ,AR3
	MAR	*+
	OR	* ,AR5
	SACL	* ,AR1
EPI0_2:
	.line	9
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	158,000000000H,1

	.sym	_OSEventTO,_OSEventTO,32,2,0
	.globl	_OSEventTO

	.func	176
;>>>> 	void  OSEventTO (OS_EVENT *pevent)
******************************************************
* FUNCTION DEF : _OSEventTO
******************************************************
_OSEventTO:

LF3	.set	0

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

	.sym	_pevent,-3+LF3,24,9,16,.fake0
	.line	2
	.line	3
;>>>> 	    if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {
	LDPK	_OSTCBCur
	LAR	AR3,_OSTCBCur
	ADRK	9
	ZALS	*-,AR1
	CMPL
	SACL	* ,AR2
	LARK	AR2,-3+LF3
	MAR	*0+
	LAC	* ,AR3
	ADDK	1
	ADD	* ,AR0
	SACL	* 
	LAR	AR4,* ,AR1
	ZALS	* ,AR4
	AND	* 
	SACL	* 
	BNZ	L4
	.line	4
;>>>> 	        pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY;
	MAR	* ,AR3
	ADRK	2
	LAC	* ,AR2
	CMPL
	LAR	AR4,* ,AR4
	ADRK	4
	AND	* 
	SACL	* 
L4:
	.line	6
;>>>> 	    OSTCBCur->OSTCBStat     = OS_STAT_RDY;       /* Set status to ready                                */
	LAR	AR3,_OSTCBCur
	LACK	0
	MAR	* ,AR3
	ADRK	5
	SACL	* 
	.line	7
;>>>> 	    OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;     /* No longer waiting for event                        */
	SBRK	2
	SACL	* ,AR1
EPI0_3:
	.line	8
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	183,000000000H,1

	.sym	_OSEventWaitListInit,_OSEventWaitListInit,32,2,0
	.globl	_OSEventWaitListInit

	.func	200
;>>>> 	void  OSEventWaitListInit (OS_EVENT *pevent)
******************************************************
* FUNCTION DEF : _OSEventWaitListInit
******************************************************
_OSEventWaitListInit:

LF4	.set	0

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

	.sym	_pevent,-3+LF4,24,9,16,.fake0
	.sym	_i,1,12,1,16
	.line	2
;>>>> 	    INT8U i;
	.line	6
;>>>> 	    pevent->OSEventGrp = 0x00;                   /* No task waiting on event                           */
	LARK	AR2,-3+LF4
	MAR	*0+
	LAR	AR3,* ,AR3
	LACK	0
	ADRK	4
	SACL	* ,AR2
	.line	7
;>>>> 	    for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
	ADRK	4-LF4
	SACL	* 
	LAC	* 
	BNZ	L6
	SBRK	4-LF4
L5:
	.line	8
;>>>> 	        pevent->OSEventTbl[i] = 0x00;
	LAC	* 
	ADDK	1
	ADRK	4-LF4
	ADD	* ,AR0
	SACL	* 
	LAR	AR3,* ,AR3
	LACK	0
	SACL	* ,AR2
	.line	7
	LAC	* 
	ADDK	1
	SACL	* 
	LAC	* 
	SBRK	4-LF4
	BZ	L5
L6:
EPI0_4:
	.line	10
	MAR	* ,AR1
	SBRK	3
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	209,000000000H,2

	.sym	_OSInit,_OSInit,32,2,0
	.globl	_OSInit

	.func	225
;>>>> 	void OSInit (void)
;>>>> 	    INT16U i;
******************************************************
* FUNCTION DEF : _OSInit
******************************************************
_OSInit:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,2
	LAR	AR0,*0+,AR2

	.sym	_i,1,14,1,16
	.line	7
;>>>> 	    OSTime        = 0L;                                    /* Clear the 32-bit system clock            */
	LACK	0
	LDPK	_OSTime
	SACL	_OSTime
	SACH	_OSTime+1
	.line	8
;>>>> 	    OSIntNesting  = 0;                                     /* Clear the interrupt nesting counter      */
	SACL	_OSIntNesting
	.line	9
;>>>> 	    OSLockNesting = 0;                                     /* Clear the scheduling lock counter        */
;>>>> 	#if OS_TASK_CREATE_EN  || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN
	SACL	_OSLockNesting
	.line	11
;>>>> 	    OSTaskCtr     = 0;                                     /* Clear the number of tasks                */
;>>>> 	#endif
	SACL	_OSTaskCtr
	.line	13
;>>>> 	    OSRunning     = FALSE;                                 /* Indicate that multitasking not started   */
	SACL	_OSRunning
	.line	14
;>>>> 	    OSIdleCtr     = 0L;                                    /* Clear the 32-bit idle counter            */
;>>>> 	#if OS_TASK_STAT_EN && OS_TASK_CREATE_EXT_EN
;>>>> 	    OSIdleCtrRun  = 0L;
;>>>> 	    OSIdleCtrMax  = 0L;
;>>>> 	    OSStatRdy     = FALSE;                                 /* Statistic task is not ready              */
;>>>> 	#endif
	SACL	_OSIdleCtr
	SACH	_OSIdleCtr+1
	.line	20
;>>>> 	    OSCtxSwCtr    = 0;                                     /* Clear the context switch counter         */
	SACL	_OSCtxSwCtr
	SACH	_OSCtxSwCtr+1
	.line	21
;>>>> 	    OSRdyGrp      = 0;                                     /* Clear the ready list                     */
	SACL	_OSRdyGrp
	.line	22
;>>>> 	    for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
	LARK	AR2,1
	MAR	*0+
	SACL	* 
	LAC	* 
	BNZ	L8
L7:
	.line	23
;>>>> 	        OSRdyTbl[i] = 0;
	LAC	* ,AR0
	ADLK	_OSRdyTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR3
	LACK	0
	SACL	* ,AR2
	.line	22
	LAC	* 
	ADDK	1
	SACL	* 
	LAC	* 
	BZ	L7
L8:
	.line	26
;>>>> 	    OSPrioCur     = 0;
	LACK	0
	LDPK	_OSPrioCur
	SACL	_OSPrioCur
	.line	27
;>>>> 	    OSPrioHighRdy = 0;                                           
	SACL	_OSPrioHighRdy
	.line	28
;>>>> 	    OSTCBHighRdy  = (OS_TCB *)0;                                 /* TCB Initialization                 */
	SACL	_OSTCBHighRdy
	.line	29
;>>>> 	    OSTCBCur      = (OS_TCB *)0;
	SACL	_OSTCBCur
	.line	30
;>>>> 	    OSTCBList     = (OS_TCB *)0;
	SACL	_OSTCBList
	.line	31
;>>>> 	    for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) {                 /* Clear the priority table           */
	SACL	* 
	ZALS	* 
	SUBK	4
	BGEZ	L10
L9:
	.line	32
;>>>> 	        OSTCBPrioTbl[i] = (OS_TCB *)0;
	LAC	* ,AR0
	ADLK	_OSTCBPrioTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR3
	LACK	0
	SACL	* ,AR2
	.line	31
	LAC	* 
	ADDK	1
	SACL	* 
	ZALS	* 
	SUBK	4
	BLZ	L9
L10:
	.line	35
;>>>> 	    for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {  /* Init. list of free TCBs            */
	LACK	0
	SACL	* 
	ZALS	* 
	SUBK	3
	BGEZ	L12
L11:
	.line	36
;>>>> 	        OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1];
	LAC	* ,AR0
	ADDK	1
	SACL	* 
	LT	* ,AR1
	MPYK	11
	PAC
	ADLK	_OSTCBTbl+0,0
	SACL	* ,AR2
	LT	* ,AR0
	MPYK	11
	PAC
	ADLK	_OSTCBTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR1
	LAC	* ,AR3
	MAR	*+
	SACL	* ,AR2
	.line	35
	LAC	* 
	ADDK	1
	SACL	* 
	ZALS	* 
	SUBK	3
	BLZ	L11
L12:
	.line	38
;>>>> 	    OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS - 1].OSTCBNext = (OS_TCB *)0;    /* Last OS_TCB             */
	LRLK	AR3,_OSTCBTbl+34
	LACK	0
	MAR	* ,AR3
	SACL	* ,AR2
	.line	39
;>>>> 	    OSTCBFreeList                                         = &OSTCBTbl[0];
;>>>> 	#if OS_MAX_EVENTS >= 2
	LALK	_OSTCBTbl+0
	LDPK	_OSTCBFreeList
	SACL	_OSTCBFreeList
	.line	42
;>>>> 	    for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {            /* Init. list of free EVENT control blocks  */
	LACK	0
	SACL	* 
	LAC	* 
	BNZ	L14
L13:
	.line	43
;>>>> 	        OSEventTbl[i].OSEventPtr = (OS_EVENT *)&OSEventTbl[i + 1];
	LAC	* ,AR0
	ADDK	1
	SACL	* 
	LT	* ,AR1
	MPYK	5
	PAC
	ADLK	_OSEventTbl+0,0
	SACL	* ,AR2
	LT	* ,AR0
	MPYK	5
	PAC
	ADLK	_OSEventTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR1
	LAC	* ,AR3
	SACL	* ,AR2
	.line	42
	LAC	* 
	ADDK	1
	SACL	* 
	LAC	* 
	BZ	L13
L14:
	.line	45
;>>>> 	    OSEventTbl[OS_MAX_EVENTS - 1].OSEventPtr = (OS_EVENT *)0;
	LRLK	AR3,_OSEventTbl+5
	LACK	0
	MAR	* ,AR3
	SACL	* 
	.line	46
;>>>> 	    OSEventFreeList                          = &OSEventTbl[0];    
;>>>> 	#endif
;>>>> 	#if OS_Q_EN && (OS_MAX_QS >= 2)
;>>>> 	    OSQInit();                                             /* Initialize the message queue structures  */
;>>>> 	#endif
;>>>> 	#if OS_MEM_EN && OS_MAX_MEM_PART >= 2
;>>>> 	    OSMemInit();                                           /* Initialize the memory manager            */
;>>>> 	#endif    
;>>>> 	#if OS_STK_GROWTH == 1
;>>>> 	    #if OS_TASK_CREATE_EXT_EN
;>>>> 	    OSTaskCreateExt(OSTaskIdle, 
;>>>> 	                    (void *)0,                                 /* No arguments passed to OSTaskIdle()  */
;>>>> 	                    &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */
;>>>> 	                    OS_IDLE_PRIO,                              /* Lowest priority level                */
;>>>> 	                    OS_TASK_IDLE_ID,
;>>>> 	                    &OSTaskIdleStk[0],                         /* Set Bottom-Of-Stack                  */
;>>>> 	                    OS_TASK_IDLE_STK_SIZE, 
;>>>> 	                    (void *)0,                                 /* No TCB extension                     */
;>>>> 	                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
;>>>> 	    #else
;>>>> 	    OSTaskCreate(OSTaskIdle, (void *)0, &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], OS_IDLE_PRIO);
;>>>> 	    #endif
;>>>> 	#else
;>>>> 	    #if OS_TASK_CREATE_EXT_EN
;>>>> 	    OSTaskCreateExt(OSTaskIdle, 
;>>>> 	                    (void *)0,                                 /* No arguments passed to OSTaskIdle()  */
;>>>> 	                    &OSTaskIdleStk[0],                         /* Set Top-Of-Stack                     */
;>>>> 	                    OS_IDLE_PRIO,                              /* Lowest priority level                */
;>>>> 	                    OS_TASK_IDLE_ID,
;>>>> 	                    &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack                  */
;>>>> 	                    OS_TASK_IDLE_STK_SIZE, 
;>>>> 	                    (void *)0,                                 /* No TCB extension                     */
;>>>> 	                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
;>>>> 	    #else
	SBRK	5
	LDPK	_OSEventFreeList
	SAR	AR3,_OSEventFreeList
	.line	83
;>>>> 	    OSTaskCreate(OSTaskIdle, (void *)0, &OSTaskIdleStk[0], OS_IDLE_PRIO);
;>>>> 	    #endif
;>>>> 	#endif
;>>>> 	#if OS_TASK_STAT_EN 
;>>>> 	    #if OS_TASK_CREATE_EXT_EN
;>>>> 	        #if OS_STK_GROWTH == 1
;>>>> 	        OSTaskCreateExt(OSTaskStat, 
;>>>> 	                        (void *)0,                                /* No args passed to OSTaskStat()    */
;>>>> 	                        &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],/* Set Top-Of-Stack                  */
;>>>> 	                        OS_STAT_PRIO,                             /* One higher than the idle task     */
;>>>> 	                        OS_TASK_STAT_ID,
;>>>> 	                        &OSTaskStatStk[0],                        /* Set Bottom-Of-Stack               */
;>>>> 	                        OS_TASK_STAT_STK_SIZE, 
;>>>> 	                        (void *)0,                                /* No TCB extension                  */
;>>>> 	                        OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */
;>>>> 	        #else
;>>>> 	        OSTaskCreateExt(OSTaskStat, 
;>>>> 	                        (void *)0,                                /* No args passed to OSTaskStat()    */
;>>>> 	                        &OSTaskStatStk[0],                        /* Set Top-Of-Stack                  */
;>>>> 	                        OS_STAT_PRIO,                             /* One higher than the idle task     */
;>>>> 	                        OS_TASK_STAT_ID,
;>>>> 	                        &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],/* Set Bottom-Of-Stack               */
;>>>> 	                        OS_TASK_STAT_STK_SIZE, 
;>>>> 	                        (void *)0,                                /* No TCB extension                  */
;>>>> 	                        OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */
;>>>> 	        #endif
;>>>> 	    #else
;>>>> 	        #if OS_STK_GROWTH == 1
;>>>> 	        OSTaskCreate(OSTaskStat, 
;>>>> 	                     (void *)0,                                   /* No args passed to OSTaskStat()    */
;>>>> 	                     &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Top-Of-Stack                  */
;>>>> 	                     OS_STAT_PRIO);                               /* One higher than the idle task     */
;>>>> 	        #else
	MAR	* ,AR1
	LACK	3
	SACL	*+
	LALK	_OSTaskIdleStk+0
	SACL	*+
	LACK	0
	SACL	*+
	LALK	_OSTaskIdle+0
	SACL	*+
	CALL	_OSTaskCreate
	SBRK	4
	.line	117
;>>>> 	        OSTaskCreate(OSTaskStat, 
;>>>> 	                     (void *)0,                                   /* No args passed to OSTaskStat()    */
;>>>> 	                     &OSTaskStatStk[0],                           /* Set Top-Of-Stack                  */
;>>>> 	                     OS_STAT_PRIO);                               /* One higher than the idle task     */
;>>>> 	        #endif
;>>>> 	    #endif
;>>>> 	#endif
	LACK	2
	SACL	*+
	LALK	_OSTaskStatStk+0
	SACL	*+
	LACK	0
	SACL	*+
	LALK	_OSTaskStat+0
	SACL	*+
	CALL	_OSTaskCreate
	SBRK	4
EPI0_5:
	.line	124
	SBRK	3
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	348,000000000H,2

	.sym	_OSIntEnter,_OSIntEnter,32,2,0
	.globl	_OSIntEnter

	.func	373
;>>>> 	void OSIntEnter (void)
******************************************************
* FUNCTION DEF : _OSIntEnter
******************************************************
_OSIntEnter:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+

	.line	3
;>>>> 	    OS_ENTER_CRITICAL();
	setc intm
	.line	4
;>>>> 	    OSIntNesting++;                              /* Increment ISR nesting level                        */
	LDPK	_OSIntNesting
	LAC	_OSIntNesting
	ADDK	1
	SACL	_OSIntNesting
	.line	5
;>>>> 	    OS_EXIT_CRITICAL();
	clrc intm
EPI0_6:
	.line	6
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	378,000000000H,1

	.sym	_OSIntExit,_OSIntExit,32,2,0
	.globl	_OSIntExit

	.func	399
;>>>> 	void OSIntExit (void)
******************************************************
* FUNCTION DEF : _OSIntExit
******************************************************
_OSIntExit:
	POPD	*+
	SAR	AR0,*+
	SAR	AR1,*
	LARK	AR0,1
	LAR	AR0,*0+

	.line	3
;>>>> 	    OS_ENTER_CRITICAL();
	setc intm
	.line	4
;>>>> 	    if ((--OSIntNesting | OSLockNesting) == 0) { /* Reschedule only if all ISRs completed & not locked */
	LDPK	_OSIntNesting
	ZALS	_OSIntNesting
	SUBK	1
	SACL	_OSIntNesting
	OR	_OSLockNesting
	ANDK	0FFFFh
	BNZ	L15
	.line	5
;>>>> 	        OSIntExitY    = OSUnMapTbl[OSRdyGrp];
	LAC	_OSRdyGrp

⌨️ 快捷键说明

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