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

📄 ucos_ii.asm

📁 dsp常用例程UCOS程序源代码 基于TIDSP
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	BBZ	L39
	.line	37
;>>>> 	        OS_EventTO(pevent);
	MAR	* ,AR2
	LARK	AR2,-3+LF20
	MAR	*0+
	LAC	* ,AR1
	SACL	*+
	CALL	_OS_EventTO
	MAR	*-
	.line	38
;>>>> 	        OS_EXIT_CRITICAL();
 CLRC INTM
	.line	39
;>>>> 	        *err = OS_TIMEOUT;                            /* Indicate that didn't get event within TO      */
	MAR	* ,AR2
	LARK	AR2,-5+LF20
	MAR	*0+
	LAR	AR3,* ,AR3
	LACK	10
	SACL	* 
	.line	40
;>>>> 	        return;
	B	EPI0_20
L39:
	.line	42
;>>>> 	    OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;
	LACK	0
	SBRK	2
	SACL	* 
	.line	43
;>>>> 	    OS_EXIT_CRITICAL();
 CLRC INTM
	.line	44
;>>>> 	    *err = OS_NO_ERR;
	MAR	* ,AR2
	LARK	AR2,-5+LF20
	MAR	*0+
	LAR	AR4,* ,AR4
	SACL	* 
EPI0_20:
	.line	45
	MAR	* ,AR1
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	288,000000000H,1

	.sym	_OSSemPost,_OSSemPost,46,2,0
	.globl	_OSSemPost

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

LF21	.set	0

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

	.sym	_pevent,-3+LF21,24,9,16,.fake0
	.line	2
;>>>> 	#if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
;>>>> 	    OS_CPU_SR  cpu_sr;                               
;>>>> 	#endif    
;>>>> 	#if OS_ARG_CHK_EN > 0
	.line	9
;>>>> 	    if (pevent == (OS_EVENT *)0) {                         /* Validate 'pevent'                        */
	LARK	AR2,-3+LF21
	MAR	*0+
	LAC	* 
	BNZ	L40
	.line	10
;>>>> 	        return (OS_ERR_PEVENT_NULL);
	LACK	4
	B	EPI0_21
L40:
	.line	12
;>>>> 	    if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {        /* Validate event block type                */
	LAR	AR3,* ,AR3
	LAC	* 
	SUBK	3
	BZ	L41
	.line	13
;>>>> 	        return (OS_ERR_EVENT_TYPE);
;>>>> 	#endif
	LACK	1
	B	EPI0_21
L41:
	.line	16
;>>>> 	    OS_ENTER_CRITICAL();
 SETC INTM
	.line	17
;>>>> 	    if (pevent->OSEventGrp != 0x00) {                      /* See if any task waiting for semaphore    */
	MAR	*+
	LAC	* 
	BZ	L42
	.line	18
;>>>> 	        OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM);   /* Ready highest prio task waiting on event */
	MAR	*-,AR1
	LACK	1
	SACL	*+
	LACK	0
	SACL	*+,AR1
	SAR	AR3,*+
	CALL	_OS_EventTaskRdy
	SBRK	3
	.line	19
;>>>> 	        OS_EXIT_CRITICAL();
 CLRC INTM
	.line	20
;>>>> 	        OS_Sched();                                        /* Find highest priority task ready to run  */
	CALL	_OS_Sched
	.line	21
;>>>> 	        return (OS_NO_ERR);
	LACK	0
	B	EPI0_21
L42:
	.line	23
;>>>> 	    if (pevent->OSEventCnt < 65535) {                 /* Make sure semaphore will not overflow         */
	MAR	*+
	ZALS	* 
	BNV	$+2
	MAR	* ,AR2
	ADRK	4-LF21
	SACL	*+
	SACH	*-
	LT	*+
	MPYK	1
	LPH	* 
	RSXM
	LACK	65535
	SPAC
	BNV	$+6
	BGZ	L43
	B	$+4
	BLEZ	L43
	.line	24
;>>>> 	        pevent->OSEventCnt++;                         /* Increment semaphore count to register event   */
	MAR	* ,AR3
	LAC	* 
	ADDK	1
	SACL	* 
	.line	25
;>>>> 	        OS_EXIT_CRITICAL();
 CLRC INTM
	.line	26
;>>>> 	        return (OS_NO_ERR);
	LACK	0
	B	EPI0_21
L43:
	.line	28
;>>>> 	    OS_EXIT_CRITICAL();                               /* Semaphore value has reached its maximum       */
 CLRC INTM
	.line	29
;>>>> 	    return (OS_SEM_OVF);
	LACK	50
EPI0_21:
	.line	30
	MAR	* ,AR1
	SBRK	4
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	337,000000000H,3
	.file	"os_task.c"

	.sym	_OSTaskCreate,_OSTaskCreate,46,2,0
	.globl	_OSTaskCreate

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

LF22	.set	0

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

	.sym	_task,-3+LF22,144,9,16
	.sym	_pdata,-4+LF22,16,9,16
	.sym	_ptos,-5+LF22,30,9,16
	.sym	_prio,-6+LF22,14,9,16
	.sym	_psp,1,30,1,16
	.sym	_err,2,14,1,16
	.line	2
;>>>> 	#if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
;>>>> 	    OS_CPU_SR  cpu_sr;
;>>>> 	#endif
;>>>> 	    OS_STK    *psp;
;>>>> 	    INT8U      err;
;>>>> 	#if OS_ARG_CHK_EN > 0
	.line	11
;>>>> 	    if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range           */
	LARK	AR2,-6+LF22
	MAR	*0+
	ZALS	* 
	SUBK	12
	BLEZ	L44
	.line	12
;>>>> 	        return (OS_PRIO_INVALID);
;>>>> 	#endif
	LACK	42
	B	EPI0_22
L44:
	.line	15
;>>>> 	    OS_ENTER_CRITICAL();
 SETC INTM
	.line	16
;>>>> 	    if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority  */
	ADLK	_OSTCBPrioTbl+12,0
	MAR	* ,AR0
	SACL	* 
	LAR	AR3,* ,AR3
	LAC	* 
	BNZ	L45
	.line	17
;>>>> 	        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	19
;>>>> 	        OS_EXIT_CRITICAL();
 CLRC INTM
	.line	20
;>>>> 	        psp = (OS_STK *)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	21
;>>>> 	        err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0);
	LACK	0
	SACL	*+
	SACL	*+
	SACL	*+
	SACH	*+
	SACL	*+
	SACL	*+,AR2
	LAC	* ,AR1
	SACL	*+,AR2
	SBRK	7-LF22
	LAC	* ,AR1
	SACL	*+
	CALL	_OS_TCBInit
	SBRK	8
	MAR	* ,AR2
	LARK	AR2,2
	MAR	*0+
	SACL	* 
	.line	22
;>>>> 	        if (err == OS_NO_ERR) {
	LAC	* 
	BNZ	L46
	.line	23
;>>>> 	            OS_ENTER_CRITICAL();
 SETC INTM
	.line	24
;>>>> 	            OSTaskCtr++;                                        /* Increment the #tasks counter        */
	LDPK	_OSTaskCtr
	LAC	_OSTaskCtr
	ADDK	1
	SACL	_OSTaskCtr
	.line	25
;>>>> 	            OS_EXIT_CRITICAL();
 CLRC INTM
	.line	26
;>>>> 	            if (OSRunning == TRUE) {         /* Find highest priority task if multitasking has started */
	LAC	_OSRunning
	SUBK	1
	BNZ	L48
	.line	27
;>>>> 	                OS_Sched();
;>>>> 	        } else {
	CALL	_OS_Sched,AR1
	B	L48
L46:
	.line	30
;>>>> 	            OS_ENTER_CRITICAL();
 SETC INTM
	.line	31
;>>>> 	            OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others                 */
	SBRK	8-LF22
	LAC	* ,AR0
	ADLK	_OSTCBPrioTbl+0,0
	SACL	* 
	LAR	AR3,* ,AR3
	LACK	0
	SACL	* 
	.line	32
;>>>> 	            OS_EXIT_CRITICAL();
 CLRC INTM
L48:
	.line	34
;>>>> 	        return (err);
	MAR	* ,AR2
	LARK	AR2,2
	MAR	*0+
	ZALS	* 
	B	EPI0_22
L45:
	.line	36
;>>>> 	    OS_EXIT_CRITICAL();
 CLRC INTM
	.line	37
;>>>> 	    return (OS_PRIO_EXIST);
	LACK	40
EPI0_22:
	.line	38
	MAR	* ,AR1
	SBRK	4
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	195,000000000H,3
	.file	"os_time.c"

	.sym	_OSTimeDly,_OSTimeDly,32,2,0
	.globl	_OSTimeDly

	.func	35
;>>>> 	void  OSTimeDly (INT16U ticks)
******************************************************
* FUNCTION DEF : _OSTimeDly
******************************************************
_OSTimeDly:

LF23	.set	0

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

	.sym	_ticks,-3+LF23,14,9,16
	.line	2
;>>>> 	#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;>>>> 	    OS_CPU_SR  cpu_sr;
;>>>> 	#endif    
	.line	8
;>>>> 	    if (ticks > 0) {                                                      /* 0 means no delay!         */
	LARK	AR2,-3+LF23
	MAR	*0+
	LAC	* 
	BZ	L49
	.line	9
;>>>> 	        OS_ENTER_CRITICAL();
 SETC INTM
	.line	10
;>>>> 	        if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {  /* Delay current task        */
	LDPK	_OSTCBCur
	LAR	AR3,_OSTCBCur
	MAR	* ,AR3
	ADRK	9
	ZALS	*-,AR1
	CMPL
	SACL	* ,AR3
	LAC	* ,AR0
	ADLK	_OSRdyTbl+0,0
	SACL	* 
	LAR	AR4,* ,AR1
	ZALS	* ,AR4
	AND	* 
	SACL	* 
	BNZ	L50
	.line	11
;>>>> 	            OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
	MAR	* ,AR3
	ADRK	2
	LAC	* 
	CMPL
	AND	_OSRdyGrp
	SACL	_OSRdyGrp
L50:
	.line	13
;>>>> 	        OSTCBCur->OSTCBDly = ticks;                                       /* Load ticks in TCB         */
	LAR	AR3,_OSTCBCur
	MAR	* ,AR2
	LAC	* ,AR3
	ADRK	4
	SACL	* 
	.line	14
;>>>> 	        OS_EXIT_CRITICAL();
 CLRC INTM
	.line	15
;>>>> 	        OS_Sched();                                                       /* Find next task to run!    */
	CALL	_OS_Sched,AR1
L49:
EPI0_23:
	.line	17
	MAR	* ,AR1
	SBRK	2
	LAR	AR0,*-
	PSHD	*
	RET

	.endfunc	51,000000000H,1

	.sym	_OSTimeDlyHMSM,_OSTimeDlyHMSM,46,2,0
	.globl	_OSTimeDlyHMSM

	.func	79
;>>>> 	INT8U  OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli)
******************************************************
* FUNCTION DEF : _OSTimeDlyHMSM
******************************************************
_OSTimeDlyHMSM:

LF24	.set	0

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

	.sym	_hours,-3+LF24,14,9,16
	.sym	_minutes,-4+LF24,14,9,16
	.sym	_seconds,-5+LF24,14,9,16
	.sym	_milli,-6+LF24,14,9,16
	.sym	_ticks,1,15,1,32
	.sym	_loops,3,14,1,16
	.line	2
;>>>> 	    INT32U ticks;
;>>>> 	    INT16U loops;
	.line	7
;>>>> 	    if (hours > 0 || minutes > 0 || seconds > 0 || milli > 0) {
	LARK	AR2,-3+LF24
	MAR	*0+
	LAC	* 
	BNZ	LL26
	MAR	*-
	LAC	* 
	BNZ	LL26
	MAR	*-
	LAC	* 
	BNZ	LL26
	MAR	*-
	LAC	* 
	BZ	L51
LL26:
	.line	8
;>>>> 	        if (minutes > 59) {
	LARK	AR2,-4+LF24
	MAR	*0+
	ZALS	* 
	SUBK	59
	BLEZ	L52
	.line	9
;>>>> 	            return (OS_TIME_INVALID_MINUTES);    /* Validate arguments to be within range              */
	LACK	81
	B	EPI0_24
L52:
	.line	11
;>>>> 	        if (seconds > 59) {
	MAR	*-
	ZALS	* 
	SUBK	59
	BLEZ	L53
	.line	12
;>>>> 	            return (OS_TIME_INVALID_SECONDS);
	LACK	82
	B	EPI0_24
L53:
	.line	14
;>>>> 	        if (milli > 999) {
	MAR	*-
	ZALS	* 
	SUBK	999
	BLEZ	L54
	.line	15
;>>>> 	            return (OS_TIME_INVALID_MILLI);
	LACK	83
	B	EPI0_24
L54:
	.line	19
;>>>> 	        ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
;>>>> 	              + OS_TICKS_PER_SEC * ((INT32U)milli + 500L / OS_TICKS_PER_SEC) / 1000L;
	ADRK	2
	ZALS	* ,AR1
	SACL	*+
	SACH	*+
	SACL	*+
	LACK	60
	MAR	*-
	CALL	L$$MPY
	MAR	* ,AR2
	ADRK	8-LF24
	SACL	*+
	SACH	* 
	SBRK	8-LF24
	ZALS	* ,AR1
	SACL	*+
	SACH	*+
	SACL	*+
	LACK	3600
	MAR	*-
	CALL	L$$MPY
	MAR	* ,AR2
	ADRK	7-LF24
	ADDS	*+
	ADDH	* 
	SBRK	10-LF24
	ADDS	* ,AR1
	SACL	*+
	SACH	*+
	SACL	*+
	LACK	100
	MAR	*-
	CALL	L$$MPY
	MAR	* ,AR2
	ADRK	11-LF24
	SACL	*+
	SACH	* 
	LACK	5
	SBRK	13-LF24
	ADDS	* ,AR1
	SACL	*+
	SACH	*+
	SACL	*+
	LACK	100
	MAR	*-
	CALL	L$$MPY
	MAR	* ,AR2
	ADRK	14-LF24
	SACL	*+
	SACH	*-,AR1
	LACK	1000
	SACL	*+
	SACH	*+,AR2
	ZALS	*+
	ADDH	* ,AR1
	CALL	L$$DIVU
	MAR	* ,AR2
	SBRK	3
	ADDS	*+
	ADDH	* 
	SBRK	6
	SACL	*+
	SACH	* 
	.line	21
;>>>> 	        loops = (INT16U)(ticks / 65536L);        /* Compute the integral number of 65536 tick delays   */
	ZALS	*+
	SACL	* 
	.line	22
;>>>> 	        ticks = ticks % 65536L;                  /* Obtain  the fractional number of ticks             */
	SBRK	2
	ZALS	* 
	ANDK	65535
	SACL	*+
	ZAC
	SACL	*-
	.line	23
;>>>> 	        OSTimeDly((INT16U)ticks);
	LAC	* ,AR1
	SACL	*+
	CALL	_OSTimeDly
	MAR	*-,AR2
	.line	24
;>>>> 	        while (loops > 0) {
	LA

⌨️ 快捷键说明

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