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

📄 ucos-ii.lss

📁 avr ucos 代码 测试环境:source insight WINAVR 2个进程
💻 LSS
📖 第 1 页 / 共 5 页
字号:
        OSTCBList               = ptcb;
     492:	d0 93 c7 02 	sts	0x02C7, r29
     496:	c0 93 c6 02 	sts	0x02C6, r28
        OSRdyGrp               |= ptcb->OSTCBBitY;         /* Make task ready to run                   */
     49a:	80 91 0b 03 	lds	r24, 0x030B
     49e:	9f 8d       	ldd	r25, Y+31	; 0x1f
     4a0:	89 2b       	or	r24, r25
     4a2:	80 93 0b 03 	sts	0x030B, r24
        OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
     4a6:	ed 8d       	ldd	r30, Y+29	; 0x1d
     4a8:	f0 e0       	ldi	r31, 0x00	; 0
     4aa:	e4 5f       	subi	r30, 0xF4	; 244
     4ac:	fc 4f       	sbci	r31, 0xFC	; 252
     4ae:	80 81       	ld	r24, Z
     4b0:	9e 8d       	ldd	r25, Y+30	; 0x1e
     4b2:	89 2b       	or	r24, r25
     4b4:	80 83       	st	Z, r24
        OSTaskCtr++;                                       /* Increment the #tasks counter             */
     4b6:	80 91 ce 02 	lds	r24, 0x02CE
     4ba:	8f 5f       	subi	r24, 0xFF	; 255
     4bc:	80 93 ce 02 	sts	0x02CE, r24
        OS_EXIT_CRITICAL();
     4c0:	78 94       	sei
     4c2:	80 e0       	ldi	r24, 0x00	; 0
     4c4:	02 c0       	rjmp	.+4      	; 0x4ca <OS_TCBInit+0x106>
        return (OS_ERR_NONE);
    }
    OS_EXIT_CRITICAL();
     4c6:	78 94       	sei
     4c8:	82 e4       	ldi	r24, 0x42	; 66
    return (OS_ERR_TASK_NO_MORE_TCB);
}
     4ca:	df 91       	pop	r29
     4cc:	cf 91       	pop	r28
     4ce:	1f 91       	pop	r17
     4d0:	0f 91       	pop	r16
     4d2:	ff 90       	pop	r15
     4d4:	ef 90       	pop	r14
     4d6:	df 90       	pop	r13
     4d8:	cf 90       	pop	r12
     4da:	bf 90       	pop	r11
     4dc:	af 90       	pop	r10
     4de:	9f 90       	pop	r9
     4e0:	08 95       	ret

000004e2 <OS_TaskStatStkChk>:
*********************************************************************************************************
*/

#if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
void  OS_TaskStatStkChk (void)
{
     4e2:	ef 92       	push	r14
     4e4:	ff 92       	push	r15
     4e6:	1f 93       	push	r17
     4e8:	df 93       	push	r29
     4ea:	cf 93       	push	r28
     4ec:	cd b7       	in	r28, 0x3d	; 61
     4ee:	de b7       	in	r29, 0x3e	; 62
     4f0:	28 97       	sbiw	r28, 0x08	; 8
     4f2:	0f b6       	in	r0, 0x3f	; 63
     4f4:	f8 94       	cli
     4f6:	de bf       	out	0x3e, r29	; 62
     4f8:	0f be       	out	0x3f, r0	; 63
     4fa:	cd bf       	out	0x3d, r28	; 61
     4fc:	10 e0       	ldi	r17, 0x00	; 0
    INT8U        err;
    INT8U        prio;


    for (prio = 0; prio <= OS_TASK_IDLE_PRIO; prio++) {
        err = OSTaskStkChk(prio, &stk_data);
     4fe:	7e 01       	movw	r14, r28
     500:	08 94       	sec
     502:	e1 1c       	adc	r14, r1
     504:	f1 1c       	adc	r15, r1
     506:	b7 01       	movw	r22, r14
     508:	81 2f       	mov	r24, r17
     50a:	0e 94 a4 10 	call	0x2148	; 0x2148 <OSTaskStkChk>
    OS_STK_DATA  stk_data;
    INT8U        err;
    INT8U        prio;


    for (prio = 0; prio <= OS_TASK_IDLE_PRIO; prio++) {
     50e:	1f 5f       	subi	r17, 0xFF	; 255
     510:	10 34       	cpi	r17, 0x40	; 64
     512:	c9 f7       	brne	.-14     	; 0x506 <OS_TaskStatStkChk+0x24>
#endif
                }
            }
        }
    }
}
     514:	28 96       	adiw	r28, 0x08	; 8
     516:	0f b6       	in	r0, 0x3f	; 63
     518:	f8 94       	cli
     51a:	de bf       	out	0x3e, r29	; 62
     51c:	0f be       	out	0x3f, r0	; 63
     51e:	cd bf       	out	0x3d, r28	; 61
     520:	cf 91       	pop	r28
     522:	df 91       	pop	r29
     524:	1f 91       	pop	r17
     526:	ff 90       	pop	r15
     528:	ef 90       	pop	r14
     52a:	08 95       	ret

0000052c <OS_TaskIdle>:



    (void)p_arg;                                 /* Prevent compiler warning for not using 'parg'      */
    for (;;) {
        OS_ENTER_CRITICAL();
     52c:	f8 94       	cli
        OSIdleCtr++;
     52e:	80 91 0c 02 	lds	r24, 0x020C
     532:	90 91 0d 02 	lds	r25, 0x020D
     536:	a0 91 0e 02 	lds	r26, 0x020E
     53a:	b0 91 0f 02 	lds	r27, 0x020F
     53e:	01 96       	adiw	r24, 0x01	; 1
     540:	a1 1d       	adc	r26, r1
     542:	b1 1d       	adc	r27, r1
     544:	80 93 0c 02 	sts	0x020C, r24
     548:	90 93 0d 02 	sts	0x020D, r25
     54c:	a0 93 0e 02 	sts	0x020E, r26
     550:	b0 93 0f 02 	sts	0x020F, r27
        OS_EXIT_CRITICAL();
     554:	78 94       	sei
        OSTaskIdleHook();                        /* Call user definable HOOK                           */
     556:	0e 94 7b 14 	call	0x28f6	; 0x28f6 <OSTaskIdleHook>
     55a:	e8 cf       	rjmp	.-48     	; 0x52c <OS_TaskIdle>

0000055c <OS_Sched>:
    OS_CPU_SR  cpu_sr = 0;
#endif



    OS_ENTER_CRITICAL();
     55c:	f8 94       	cli
    if (OSIntNesting == 0) {                           /* Schedule only if all ISRs done and ...       */
     55e:	80 91 16 03 	lds	r24, 0x0316
     562:	88 23       	and	r24, r24
     564:	09 f0       	breq	.+2      	; 0x568 <OS_Sched+0xc>
     566:	3f c0       	rjmp	.+126    	; 0x5e6 <OS_Sched+0x8a>
        if (OSLockNesting == 0) {                      /* ... scheduler is not locked                  */
     568:	80 91 0a 02 	lds	r24, 0x020A
     56c:	88 23       	and	r24, r24
     56e:	d9 f5       	brne	.+118    	; 0x5e6 <OS_Sched+0x8a>
{
#if OS_LOWEST_PRIO <= 63                         /* See if we support up to 64 tasks                   */
    INT8U   y;


    y             = OSUnMapTbl[OSRdyGrp];
     570:	e0 91 0b 03 	lds	r30, 0x030B
     574:	f0 e0       	ldi	r31, 0x00	; 0
     576:	e8 5f       	subi	r30, 0xF8	; 248
     578:	fe 4f       	sbci	r31, 0xFE	; 254
     57a:	80 81       	ld	r24, Z
    OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
     57c:	e8 2f       	mov	r30, r24
     57e:	f0 e0       	ldi	r31, 0x00	; 0
     580:	e4 5f       	subi	r30, 0xF4	; 244
     582:	fc 4f       	sbci	r31, 0xFC	; 252
     584:	e0 81       	ld	r30, Z
     586:	f0 e0       	ldi	r31, 0x00	; 0
     588:	e8 5f       	subi	r30, 0xF8	; 248
     58a:	fe 4f       	sbci	r31, 0xFE	; 254
     58c:	98 2f       	mov	r25, r24
     58e:	99 0f       	add	r25, r25
     590:	99 0f       	add	r25, r25
     592:	99 0f       	add	r25, r25
     594:	80 81       	ld	r24, Z
     596:	98 0f       	add	r25, r24
     598:	90 93 10 02 	sts	0x0210, r25

    OS_ENTER_CRITICAL();
    if (OSIntNesting == 0) {                           /* Schedule only if all ISRs done and ...       */
        if (OSLockNesting == 0) {                      /* ... scheduler is not locked                  */
            OS_SchedNew();
            if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy     */
     59c:	80 91 c5 02 	lds	r24, 0x02C5
     5a0:	98 17       	cp	r25, r24
     5a2:	09 f1       	breq	.+66     	; 0x5e6 <OS_Sched+0x8a>
                OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
     5a4:	e9 2f       	mov	r30, r25
     5a6:	f0 e0       	ldi	r31, 0x00	; 0
     5a8:	ee 0f       	add	r30, r30
     5aa:	ff 1f       	adc	r31, r31
     5ac:	ed 57       	subi	r30, 0x7D	; 125
     5ae:	f8 4f       	sbci	r31, 0xF8	; 248
     5b0:	80 81       	ld	r24, Z
     5b2:	91 81       	ldd	r25, Z+1	; 0x01
     5b4:	90 93 08 03 	sts	0x0308, r25
     5b8:	80 93 07 03 	sts	0x0307, r24
#if OS_TASK_PROFILE_EN > 0
                OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */
#endif
                OSCtxSwCtr++;                          /* Increment context switch counter             */
     5bc:	80 91 c8 02 	lds	r24, 0x02C8
     5c0:	90 91 c9 02 	lds	r25, 0x02C9
     5c4:	a0 91 ca 02 	lds	r26, 0x02CA
     5c8:	b0 91 cb 02 	lds	r27, 0x02CB
     5cc:	01 96       	adiw	r24, 0x01	; 1
     5ce:	a1 1d       	adc	r26, r1
     5d0:	b1 1d       	adc	r27, r1
     5d2:	80 93 c8 02 	sts	0x02C8, r24
     5d6:	90 93 c9 02 	sts	0x02C9, r25
     5da:	a0 93 ca 02 	sts	0x02CA, r26
     5de:	b0 93 cb 02 	sts	0x02CB, r27
                OS_TASK_SW();                          /* Perform a context switch                     */
     5e2:	0e 94 82 15 	call	0x2b04	; 0x2b04 <OSCtxSw>
            }
        }
    }
    OS_EXIT_CRITICAL();
     5e6:	78 94       	sei
}
     5e8:	08 95       	ret

000005ea <OSTimeTick>:
#endif



#if OS_TIME_TICK_HOOK_EN > 0
    OSTimeTickHook();                                      /* Call user definable hook                     */
     5ea:	0e 94 c4 14 	call	0x2988	; 0x2988 <OSTimeTickHook>
#endif
#if OS_TIME_GET_SET_EN > 0
    OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter               */
     5ee:	f8 94       	cli
    OSTime++;
     5f0:	80 91 19 03 	lds	r24, 0x0319
     5f4:	90 91 1a 03 	lds	r25, 0x031A
     5f8:	a0 91 1b 03 	lds	r26, 0x031B
     5fc:	b0 91 1c 03 	lds	r27, 0x031C
     600:	01 96       	adiw	r24, 0x01	; 1
     602:	a1 1d       	adc	r26, r1
     604:	b1 1d       	adc	r27, r1
     606:	80 93 19 03 	sts	0x0319, r24
     60a:	90 93 1a 03 	sts	0x031A, r25
     60e:	a0 93 1b 03 	sts	0x031B, r26
     612:	b0 93 1c 03 	sts	0x031C, r27
    OS_EXIT_CRITICAL();
     616:	78 94       	sei
#endif
    if (OSRunning == OS_TRUE) {
     618:	80 91 0b 02 	lds	r24, 0x020B
     61c:	81 30       	cpi	r24, 0x01	; 1
     61e:	09 f0       	breq	.+2      	; 0x622 <OSTimeTick+0x38>
     620:	49 c0       	rjmp	.+146    	; 0x6b4 <OSTimeTick+0xca>
        }
        if (step == OS_FALSE) {                            /* Return if waiting for step command           */
            return;
        }
#endif
        ptcb = OSTCBList;                                  /* Point at first TCB in TCB list               */
     622:	a0 91 c6 02 	lds	r26, 0x02C6
     626:	b0 91 c7 02 	lds	r27, 0x02C7
     62a:	20 91 0b 03 	lds	r18, 0x030B
            if (ptcb->OSTCBDly != 0) {                     /* No, Delayed or waiting for event with TO     */
                if (--ptcb->OSTCBDly == 0) {               /* Decrement nbr of ticks to end of delay       */
                                                           /* Check for timeout                            */
                    if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) {
                        ptcb->OSTCBStat  &= ~(INT8U)OS_STAT_PEND_ANY;          /* Yes, Clear status flag   */
                        ptcb->OSTCBStatPend = OS_STAT_PEND_TO;                 /* Indicate PEND timeout    */
     62e:	31 e0       	ldi	r19, 0x01	; 1
     630:	39 c0       	rjmp	.+114    	; 0x6a4 <OSTimeTick+0xba>
            return;
        }
#endif
        ptcb = OSTCBList;                                  /* Point at first TCB in TCB list               */
        while (ptcb->OSTCBPrio != OS_TASK_IDLE_PRIO) {     /* Go through all TCBs in TCB list              */
            OS_ENTER_CRITICAL();
     632:	f8 94       	cli
            if (ptcb->OSTCBDly != 0) {                     /* No, Delayed or waiting for event with TO     */
     634:	57 96       	adiw	r26, 0x17	; 23
     636:	8d 91       	ld	r24, X+
     638:	9c 91       	ld	r25, X
     63a:	58 97       	sbiw	r26, 0x18	; 24
     63c:	00 97       	sbiw	r24, 0x00	; 0
     63e:	69 f1       	breq	.+90     	; 0x69a <OSTimeTick+0xb0>
                if (--ptcb->OSTCBDly == 0) {               /* Decrement nbr of ticks to end of delay       */
     640:	01 97       	sbiw	r24, 0x01	; 1
     642:	58 96       	adiw	r26, 0x18	; 24
     644:	9c 93       	st	X, r25
     646:	8e 93       	st	-X, r24
     648:	57 97       	sbiw	r26, 0x17	; 23
     64a:	89 2b       	or	r24, r25
     64c:	31 f5       	brne	.+76     	; 0x69a <OSTimeTick+0xb0>
                                                           /* Check for timeout                            */
                    if ((ptcb->OSTCBStat & OS_STAT_PEND_ANY) != OS_STAT_RDY) {
     64e:	59 96       	adiw	r26, 0x19	; 25
     650:	9c 91       	ld	r25, X
     652:	59 97       	sbiw	r26, 0x19	; 25
     654:	89 2f       	mov	r24, r25
     656:	87 73       	andi	r24, 0x37	; 55
     658:	41 f0       	breq	.+16     	; 0x66a <OSTimeTick+0x80>
                        ptcb->OSTCBStat  &= ~(INT8U)OS_STAT_PEND_ANY;          /* Yes, Clear status flag   */
     65a:	98 7c       	andi	r25, 0xC8	; 200
     65c:	59 96       	adiw	r26, 0x19	; 25
     65e:	9c 93       	st	X, r25
     660:	59 97       	sbiw	r26, 0x19	; 25
                        ptcb->OSTCBStatPend = OS_STAT_PEND_TO;                 /* Indicate PEND timeout    */
     662:	5a 96       	adiw	r26, 0x1a	; 26
     664:	3c 93       	st	X, r19
     666:	5a 97       	sbiw	r26, 0x1a	; 26
     668:	03 c0       	rjmp	.+6      	; 0x670 <OSTimeTick+0x86>
                    } else {
                        ptcb->OSTCBStatPend = OS_STAT_PEND_OK;
     66a:	5a 96       	adiw	r26, 0x1a	; 26
     66c:	1c 92       	st	X, r1
     66e:	5a 97       	sbiw	r26, 0x1a	; 26
                    }

                    if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) {  /* Is task suspended?       */
     670:	59 96       	adiw	r26, 0x19	; 25
     672:	8c 91       	ld	r24, X
     674:	59 97       	sbiw	r26, 0x19	; 25
     676:	83 fd       	sbrc	r24, 3
     678:	10 c0       	rjmp	.+32     	; 0x69a <OSTimeTick+0xb0>
                        OSRdyGrp               |= ptcb->OSTCBBitY;             /* No,  Make ready          */
     67a:	5f 96       	adiw	r26, 0x1f	; 31
     67c:	8c 91       	ld	r24, X
     67e:	5f 97       	sbiw	r26, 0x1f	; 31
     680:	28 2b       	or	r18, r24
                        OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
     682:	5d 96       	adiw	r26, 0x1d	; 29
     684:	ec 91       	ld	r30, X
     686:	5d 97       	sbiw	r26, 0x1d	; 29

⌨️ 快捷键说明

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