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

📄 ucos_ii.s

📁 ucos在mage128上的应用
💻 S
📖 第 1 页 / 共 5 页
字号:
	.dbline 774
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 2
;     *ptbl++            = 0x00;
	st Z+,R2
	.dbline 778
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 3
;     *ptbl++            = 0x00;
	st Z+,R2
	.dbline 782
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 4
;     *ptbl++            = 0x00;
	st Z+,R2
	.dbline 786
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 5
;     *ptbl++            = 0x00;
	st Z+,R2
	.dbline 790
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 6
;     *ptbl++            = 0x00;
	st Z+,R2
	movw R20,R30
	.dbline 794
; #endif
; 
; #if OS_EVENT_TBL_SIZE > 7
;     *ptbl              = 0x00;
	std z+0,R2
	.dbline -2
L61:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r ptbl 20 pc
	.dbsym r pevent 16 pS[os_event]
	.dbend
	.dbfunc s OS_InitEventList _OS_InitEventList fV
;        pevent2 -> R22,R23
;              i -> R10,R11
;        pevent1 -> R20,R21
	.even
_OS_InitEventList:
	xcall push_xgsetF00C
	.dbline -1
	.dbline 813
; #endif
; }
; #endif
; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                           INITIALIZE THE FREE LIST OF EVENT CONTROL BLOCKS
; *
; * Description: This function is called by OSInit() to initialize the free list of event control blocks.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; static  void  OS_InitEventList (void)
; {
	.dbline 821
; #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
; #if (OS_MAX_EVENTS > 1)
;     INT16U     i;
;     OS_EVENT  *pevent1;
;     OS_EVENT  *pevent2;
; 
; 
;     OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl));      /* Clear the event table                    */
	ldi R18,70
	ldi R19,0
	ldi R16,<_OSEventTbl
	ldi R17,>_OSEventTbl
	xcall _OS_MemClr
	.dbline 822
;     pevent1 = &OSEventTbl[0];
	ldi R20,<_OSEventTbl
	ldi R21,>_OSEventTbl
	.dbline 823
;     pevent2 = &OSEventTbl[1];
	ldi R22,<_OSEventTbl+14
	ldi R23,>_OSEventTbl+14
	.dbline 824
;     for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {                  /* Init. list of free EVENT control blocks  */
	clr R10
	clr R11
	xjmp L67
L64:
	.dbline 824
	.dbline 825
;         pevent1->OSEventType    = OS_EVENT_TYPE_UNUSED;
	clr R2
	movw R30,R20
	std z+0,R2
	.dbline 826
;         pevent1->OSEventPtr     = pevent2;
	std z+5,R23
	std z+4,R22
	.dbline 831
; #if OS_EVENT_NAME_SIZE > 1
;         pevent1->OSEventName[0] = '?';                           /* Unknown name                             */
;         pevent1->OSEventName[1] = OS_ASCII_NUL;
; #endif
;         pevent1++;
	subi R20,242  ; offset = 14
	sbci R21,255
	.dbline 832
;         pevent2++;
	subi R22,242  ; offset = 14
	sbci R23,255
	.dbline 833
;     }
L65:
	.dbline 824
	movw R24,R10
	adiw R24,1
	movw R10,R24
L67:
	.dbline 824
	movw R24,R10
	cpi R24,4
	ldi R30,0
	cpc R25,R30
	brlo L64
X33:
	.dbline 834
;     pevent1->OSEventType            = OS_EVENT_TYPE_UNUSED;
	clr R2
	movw R30,R20
	std z+0,R2
	.dbline 835
;     pevent1->OSEventPtr             = (OS_EVENT *)0;
	clr R3
	std z+5,R3
	std z+4,R2
	.dbline 840
; #if OS_EVENT_NAME_SIZE > 1
;     pevent1->OSEventName[0]         = '?';                       
;     pevent1->OSEventName[1]         = OS_ASCII_NUL;
; #endif
;     OSEventFreeList                 = &OSEventTbl[0];
	ldi R24,<_OSEventTbl
	ldi R25,>_OSEventTbl
	sts _OSEventFreeList+1,R25
	sts _OSEventFreeList,R24
	.dbline -2
L62:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
	.dbsym r pevent2 22 pS[os_event]
	.dbsym r i 10 i
	.dbsym r pevent1 20 pS[os_event]
	.dbend
	.dbfunc s OS_InitMisc _OS_InitMisc fV
	.even
_OS_InitMisc:
	.dbline -1
	.dbline 867
; #else
;     OSEventFreeList                 = &OSEventTbl[0];            /* Only have ONE event control block        */
;     OSEventFreeList->OSEventType    = OS_EVENT_TYPE_UNUSED;
;     OSEventFreeList->OSEventPtr     = (OS_EVENT *)0;
; #if OS_EVENT_NAME_SIZE > 1
;     OSEventFreeList->OSEventName[0] = '?';                       /* Unknown name                             */
;     OSEventFreeList->OSEventName[1] = OS_ASCII_NUL;
; #endif
; #endif
; #endif
; }
; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                                    INITIALIZE MISCELLANEOUS VARIABLES
; *
; * Description: This function is called by OSInit() to initialize miscellaneous variables.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; static  void  OS_InitMisc (void)
; {
	.dbline 872
; #if OS_TIME_GET_SET_EN > 0   
;     OSTime        = 0L;                                          /* Clear the 32-bit system clock            */
; #endif
; 
;     OSIntNesting  = 0;                                           /* Clear the interrupt nesting counter      */
	clr R2
	sts _OSIntNesting,R2
	.dbline 873
;     OSLockNesting = 0;                                           /* Clear the scheduling lock counter        */
	sts _OSLockNesting,R2
	.dbline 875
; 
;     OSTaskCtr     = 0;                                           /* Clear the number of tasks                */
	sts _OSTaskCtr,R2
	.dbline 877
; 
;     OSRunning     = FALSE;                                       /* Indicate that multitasking not started   */
	sts _OSRunning,R2
	.dbline 879
;     
;     OSCtxSwCtr    = 0;                                           /* Clear the context switch counter         */
	ldi R24,0
	ldi R25,0
	ldi R26,0
	ldi R27,0
	sts _OSCtxSwCtr+1,R25
	sts _OSCtxSwCtr,R24
	sts _OSCtxSwCtr+2+1,R27
	sts _OSCtxSwCtr+2,R26
	.dbline 880
;     OSIdleCtr     = 0L;                                          /* Clear the 32-bit idle counter            */
	ldi R24,0
	ldi R25,0
	ldi R26,0
	ldi R27,0
	sts _OSIdleCtr+1,R25
	sts _OSIdleCtr,R24
	sts _OSIdleCtr+2+1,R27
	sts _OSIdleCtr+2,R26
	.dbline -2
L68:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc s OS_InitRdyList _OS_InitRdyList fV
;        prdytbl -> R18,R19
;              i -> R16,R17
	.even
_OS_InitRdyList:
	.dbline -1
	.dbline 903
; 
; #if OS_TASK_STAT_EN > 0
;     OSIdleCtrRun  = 0L;
;     OSIdleCtrMax  = 0L;
;     OSStatRdy     = FALSE;                                       /* Statistic task is not ready              */
; #endif
; }
; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                                       INITIALIZE THE READY LIST
; *
; * Description: This function is called by OSInit() to initialize the Ready List.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; static  void  OS_InitRdyList (void)
; {
	.dbline 908
;     INT16U   i;
;     INT8U   *prdytbl;
; 
; 
;     OSRdyGrp      = 0x00;                                        /* Clear the ready list                     */
	clr R2
	sts _OSRdyGrp,R2
	.dbline 909
;     prdytbl       = &OSRdyTbl[0];
	ldi R18,<_OSRdyTbl
	ldi R19,>_OSRdyTbl
	.dbline 910
;     for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
	clr R16
	clr R17
	xjmp L73
L70:
	.dbline 910
	.dbline 911
;         *prdytbl++ = 0x00;
	clr R2
	movw R30,R18
	st Z+,R2
	movw R18,R30
	.dbline 912
;     }
L71:
	.dbline 910
	subi R16,255  ; offset = 1
	sbci R17,255
L73:
	.dbline 910
	cpi R16,8
	ldi R30,0
	cpc R17,R30
	brlo L70
X34:
	.dbline 914
; 
;     OSPrioCur     = 0;
	clr R2
	sts _OSPrioCur,R2
	.dbline 915
;     OSPrioHighRdy = 0;
	sts _OSPrioHighRdy,R2
	.dbline 917
; 
;     OSTCBHighRdy  = (OS_TCB *)0;                                 
	clr R3
	sts _OSTCBHighRdy+1,R3
	sts _OSTCBHighRdy,R2
	.dbline 918
;     OSTCBCur      = (OS_TCB *)0;
	sts _OSTCBCur+1,R3
	sts _OSTCBCur,R2
	.dbline -2
L69:
	.dbline 0 ; func end
	ret
	.dbsym r prdytbl 18 pc
	.dbsym r i 16 i
	.dbend
	.dbfunc s OS_InitTaskIdle _OS_InitTaskIdle fV
	.even
_OS_InitTaskIdle:
	sbiw R28,3
	.dbline -1
	.dbline 936
; }
; 
; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                                         CREATING THE IDLE TASK
; *
; * Description: This function creates the Idle Task.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; static  void  OS_InitTaskIdle (void)
; {
	.dbline 961
; #if OS_TASK_CREATE_EXT_EN > 0
;     #if OS_STK_GROWTH == 1
;     (void)OSTaskCreateExt(OS_TaskIdle,
;                           (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
;                           &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
;     (void)OSTaskCreateExt(OS_TaskIdle,
;                           (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
;                           &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  */
;     #endif
; #else
;     #if OS_STK_GROWTH == 1
;     (void)OSTaskCreate(OS_TaskIdle,
	ldi R24,63
	std y+2,R24
	ldi R24,<_OSTaskIdleStk+255
	ldi R25,>_OSTaskIdleStk+255
	std y+1,R25
	std y+0,R24
	clr R18
	clr R19
	ldi R16,<PL_OS_TaskIdle
	ldi R17,>PL_OS_TaskIdle
	xcall _OSTaskCreate
	.dbline -2
L74:
	.dbline 0 ; func end
	adiw R28,3
	ret
	.dbend
	.dbfunc s OS_InitTCBList _OS_InitTCBList fV
;          ptcb2 -> R22,R23
;              i -> R10
;          ptcb1 -> R20,R21
	.even
_OS_InitTCBList:
	xcall push_xgsetF00C
	.dbline -1
	.dbline 1042
;                        (void *)0,
;                        &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
;                        OS_IDLE_PRIO);
;     #else
;     (void)OSTaskCreate(OS_TaskIdle,
;                        (void *)0,
;                        &OSTaskIdleStk[0],
;                        OS_IDLE_PRIO);
;     #endif
; #endif
; }
; /*$PAGE*/
; /*
; *********************************************************************************************************
; *                                             INITIALIZATION
; *                                      CREATING THE STATISTIC TASK
; *
; * Description: This function creates the Statistic Task.
; *
; * Arguments  : none
; *
; * Returns    : none
; *********************************************************************************************************
; */
; 
; #if OS_TASK_STAT_EN > 0
; static  void  OS_InitTaskStat (void)
; {
; #if OS_TASK_CREATE_EXT_EN > 0
;     #if OS_STK_GROWTH == 1
;     (void)OSTaskCreateExt(OS_TaskStat,
;                           (void *)0,                                   /* No args passed to OS_TaskStat()*/
;                           &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
;     (void)OSTaskCreateExt(OS_TaskStat,
;                           (void *)0,                                   /* No args passed to OS_TaskStat()*/
;                           &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_S

⌨️ 快捷键说明

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