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

📄 ucos-ii.lss

📁 avr ucos 代码 测试环境:source insight WINAVR 2个进程
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     688:	f0 e0       	ldi	r31, 0x00	; 0
     68a:	e4 5f       	subi	r30, 0xF4	; 244
     68c:	fc 4f       	sbci	r31, 0xFC	; 252
     68e:	80 81       	ld	r24, Z
     690:	5e 96       	adiw	r26, 0x1e	; 30
     692:	9c 91       	ld	r25, X
     694:	5e 97       	sbiw	r26, 0x1e	; 30
     696:	89 2b       	or	r24, r25
     698:	80 83       	st	Z, r24
                    }
                }
            }
            ptcb = ptcb->OSTCBNext;                        /* Point at next TCB in TCB list                */
     69a:	1e 96       	adiw	r26, 0x0e	; 14
     69c:	0d 90       	ld	r0, X+
     69e:	bc 91       	ld	r27, X
     6a0:	a0 2d       	mov	r26, r0
            OS_EXIT_CRITICAL();
     6a2:	78 94       	sei
        if (step == OS_FALSE) {                            /* Return if waiting for step command           */
            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              */
     6a4:	5b 96       	adiw	r26, 0x1b	; 27
     6a6:	8c 91       	ld	r24, X
     6a8:	5b 97       	sbiw	r26, 0x1b	; 27
     6aa:	8f 33       	cpi	r24, 0x3F	; 63
     6ac:	09 f0       	breq	.+2      	; 0x6b0 <OSTimeTick+0xc6>
     6ae:	c1 cf       	rjmp	.-126    	; 0x632 <OSTimeTick+0x48>
     6b0:	20 93 0b 03 	sts	0x030B, r18
     6b4:	08 95       	ret

000006b6 <OSStart>:
*********************************************************************************************************
*/

void  OSStart (void)
{
    if (OSRunning == OS_FALSE) {
     6b6:	80 91 0b 02 	lds	r24, 0x020B
     6ba:	88 23       	and	r24, r24
     6bc:	41 f5       	brne	.+80     	; 0x70e <OSStart+0x58>
{
#if OS_LOWEST_PRIO <= 63                         /* See if we support up to 64 tasks                   */
    INT8U   y;


    y             = OSUnMapTbl[OSRdyGrp];
     6be:	e0 91 0b 03 	lds	r30, 0x030B
     6c2:	f0 e0       	ldi	r31, 0x00	; 0
     6c4:	e8 5f       	subi	r30, 0xF8	; 248
     6c6:	fe 4f       	sbci	r31, 0xFE	; 254
     6c8:	a0 81       	ld	r26, Z
    OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
     6ca:	ea 2f       	mov	r30, r26
     6cc:	f0 e0       	ldi	r31, 0x00	; 0
     6ce:	e4 5f       	subi	r30, 0xF4	; 244
     6d0:	fc 4f       	sbci	r31, 0xFC	; 252
     6d2:	e0 81       	ld	r30, Z
     6d4:	f0 e0       	ldi	r31, 0x00	; 0
     6d6:	e8 5f       	subi	r30, 0xF8	; 248
     6d8:	fe 4f       	sbci	r31, 0xFE	; 254
     6da:	aa 0f       	add	r26, r26
     6dc:	aa 0f       	add	r26, r26
     6de:	aa 0f       	add	r26, r26
     6e0:	80 81       	ld	r24, Z
     6e2:	a8 0f       	add	r26, r24
     6e4:	a0 93 10 02 	sts	0x0210, r26

void  OSStart (void)
{
    if (OSRunning == OS_FALSE) {
        OS_SchedNew();                               /* Find highest priority's task priority number   */
        OSPrioCur     = OSPrioHighRdy;
     6e8:	a0 93 c5 02 	sts	0x02C5, r26
        OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; /* Point to highest priority task ready to run    */
     6ec:	b0 e0       	ldi	r27, 0x00	; 0
     6ee:	aa 0f       	add	r26, r26
     6f0:	bb 1f       	adc	r27, r27
     6f2:	ad 57       	subi	r26, 0x7D	; 125
     6f4:	b8 4f       	sbci	r27, 0xF8	; 248
     6f6:	8d 91       	ld	r24, X+
     6f8:	9c 91       	ld	r25, X
     6fa:	90 93 08 03 	sts	0x0308, r25
     6fe:	80 93 07 03 	sts	0x0307, r24
        OSTCBCur      = OSTCBHighRdy;
     702:	90 93 18 03 	sts	0x0318, r25
     706:	80 93 17 03 	sts	0x0317, r24
        OSStartHighRdy();                            /* Execute target specific code to start task     */
     70a:	0e 94 50 15 	call	0x2aa0	; 0x2aa0 <OSStartHighRdy>
     70e:	08 95       	ret

00000710 <OSIntExit>:
    OS_CPU_SR  cpu_sr = 0;
#endif



    if (OSRunning == OS_TRUE) {
     710:	80 91 0b 02 	lds	r24, 0x020B
     714:	81 30       	cpi	r24, 0x01	; 1
     716:	09 f0       	breq	.+2      	; 0x71a <OSIntExit+0xa>
     718:	4d c0       	rjmp	.+154    	; 0x7b4 <OSIntExit+0xa4>
        OS_ENTER_CRITICAL();
     71a:	f8 94       	cli
        if (OSIntNesting > 0) {                            /* Prevent OSIntNesting from wrapping       */
     71c:	80 91 16 03 	lds	r24, 0x0316
     720:	88 23       	and	r24, r24
     722:	19 f0       	breq	.+6      	; 0x72a <OSIntExit+0x1a>
            OSIntNesting--;
     724:	81 50       	subi	r24, 0x01	; 1
     726:	80 93 16 03 	sts	0x0316, r24
        }
        if (OSIntNesting == 0) {                           /* Reschedule only if all ISRs complete ... */
     72a:	80 91 16 03 	lds	r24, 0x0316
     72e:	88 23       	and	r24, r24
     730:	09 f0       	breq	.+2      	; 0x734 <OSIntExit+0x24>
     732:	3f c0       	rjmp	.+126    	; 0x7b2 <OSIntExit+0xa2>
            if (OSLockNesting == 0) {                      /* ... and not locked.                      */
     734:	80 91 0a 02 	lds	r24, 0x020A
     738:	88 23       	and	r24, r24
     73a:	d9 f5       	brne	.+118    	; 0x7b2 <OSIntExit+0xa2>
{
#if OS_LOWEST_PRIO <= 63                         /* See if we support up to 64 tasks                   */
    INT8U   y;


    y             = OSUnMapTbl[OSRdyGrp];
     73c:	e0 91 0b 03 	lds	r30, 0x030B
     740:	f0 e0       	ldi	r31, 0x00	; 0
     742:	e8 5f       	subi	r30, 0xF8	; 248
     744:	fe 4f       	sbci	r31, 0xFE	; 254
     746:	80 81       	ld	r24, Z
    OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
     748:	e8 2f       	mov	r30, r24
     74a:	f0 e0       	ldi	r31, 0x00	; 0
     74c:	e4 5f       	subi	r30, 0xF4	; 244
     74e:	fc 4f       	sbci	r31, 0xFC	; 252
     750:	e0 81       	ld	r30, Z
     752:	f0 e0       	ldi	r31, 0x00	; 0
     754:	e8 5f       	subi	r30, 0xF8	; 248
     756:	fe 4f       	sbci	r31, 0xFE	; 254
     758:	98 2f       	mov	r25, r24
     75a:	99 0f       	add	r25, r25
     75c:	99 0f       	add	r25, r25
     75e:	99 0f       	add	r25, r25
     760:	80 81       	ld	r24, Z
     762:	98 0f       	add	r25, r24
     764:	90 93 10 02 	sts	0x0210, r25
            OSIntNesting--;
        }
        if (OSIntNesting == 0) {                           /* Reschedule only if all ISRs complete ... */
            if (OSLockNesting == 0) {                      /* ... and not locked.                      */
                OS_SchedNew();
                if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy */
     768:	80 91 c5 02 	lds	r24, 0x02C5
     76c:	98 17       	cp	r25, r24
     76e:	09 f1       	breq	.+66     	; 0x7b2 <OSIntExit+0xa2>
                    OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];
     770:	e9 2f       	mov	r30, r25
     772:	f0 e0       	ldi	r31, 0x00	; 0
     774:	ee 0f       	add	r30, r30
     776:	ff 1f       	adc	r31, r31
     778:	ed 57       	subi	r30, 0x7D	; 125
     77a:	f8 4f       	sbci	r31, 0xF8	; 248
     77c:	80 81       	ld	r24, Z
     77e:	91 81       	ldd	r25, Z+1	; 0x01
     780:	90 93 08 03 	sts	0x0308, r25
     784:	80 93 07 03 	sts	0x0307, r24
#if OS_TASK_PROFILE_EN > 0
                    OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task  */
#endif
                    OSCtxSwCtr++;                          /* Keep track of the number of ctx switches */
     788:	80 91 c8 02 	lds	r24, 0x02C8
     78c:	90 91 c9 02 	lds	r25, 0x02C9
     790:	a0 91 ca 02 	lds	r26, 0x02CA
     794:	b0 91 cb 02 	lds	r27, 0x02CB
     798:	01 96       	adiw	r24, 0x01	; 1
     79a:	a1 1d       	adc	r26, r1
     79c:	b1 1d       	adc	r27, r1
     79e:	80 93 c8 02 	sts	0x02C8, r24
     7a2:	90 93 c9 02 	sts	0x02C9, r25
     7a6:	a0 93 ca 02 	sts	0x02CA, r26
     7aa:	b0 93 cb 02 	sts	0x02CB, r27
                    OSIntCtxSw();                          /* Perform interrupt level ctx switch       */
     7ae:	0e 94 e1 15 	call	0x2bc2	; 0x2bc2 <OSIntCtxSw>
                }
            }
        }
        OS_EXIT_CRITICAL();
     7b2:	78 94       	sei
     7b4:	08 95       	ret

000007b6 <OSInit>:
* Returns    : none
*********************************************************************************************************
*/

void  OSInit (void)
{
     7b6:	8f 92       	push	r8
     7b8:	9f 92       	push	r9
     7ba:	af 92       	push	r10
     7bc:	bf 92       	push	r11
     7be:	cf 92       	push	r12
     7c0:	df 92       	push	r13
     7c2:	ef 92       	push	r14
     7c4:	ff 92       	push	r15
     7c6:	0f 93       	push	r16
     7c8:	1f 93       	push	r17
     7ca:	df 93       	push	r29
     7cc:	cf 93       	push	r28
     7ce:	0f 92       	push	r0
     7d0:	cd b7       	in	r28, 0x3d	; 61
     7d2:	de b7       	in	r29, 0x3e	; 62
    OSInitHookBegin();                                           /* Call port specific initialization code   */
     7d4:	0e 94 77 14 	call	0x28ee	; 0x28ee <OSInitHookBegin>
*/

static  void  OS_InitMisc (void)
{
#if OS_TIME_GET_SET_EN > 0
    OSTime        = 0L;                                    /* Clear the 32-bit system clock            */
     7d8:	10 92 19 03 	sts	0x0319, r1
     7dc:	10 92 1a 03 	sts	0x031A, r1
     7e0:	10 92 1b 03 	sts	0x031B, r1
     7e4:	10 92 1c 03 	sts	0x031C, r1
#endif

    OSIntNesting  = 0;                                     /* Clear the interrupt nesting counter      */
     7e8:	10 92 16 03 	sts	0x0316, r1
    OSLockNesting = 0;                                     /* Clear the scheduling lock counter        */
     7ec:	10 92 0a 02 	sts	0x020A, r1

    OSTaskCtr     = 0;                                     /* Clear the number of tasks                */
     7f0:	10 92 ce 02 	sts	0x02CE, r1

    OSRunning     = OS_FALSE;                              /* Indicate that multitasking not started   */
     7f4:	10 92 0b 02 	sts	0x020B, r1

    OSCtxSwCtr    = 0;                                     /* Clear the context switch counter         */
     7f8:	10 92 c8 02 	sts	0x02C8, r1
     7fc:	10 92 c9 02 	sts	0x02C9, r1
     800:	10 92 ca 02 	sts	0x02CA, r1
     804:	10 92 cb 02 	sts	0x02CB, r1
    OSIdleCtr     = 0L;                                    /* Clear the 32-bit idle counter            */
     808:	10 92 0c 02 	sts	0x020C, r1
     80c:	10 92 0d 02 	sts	0x020D, r1
     810:	10 92 0e 02 	sts	0x020E, r1
     814:	10 92 0f 02 	sts	0x020F, r1
#else
    INT16U  *prdytbl;
#endif


    OSRdyGrp      = 0;                                     /* Clear the ready list                     */
     818:	10 92 0b 03 	sts	0x030B, r1
     81c:	ec e0       	ldi	r30, 0x0C	; 12
     81e:	f3 e0       	ldi	r31, 0x03	; 3
    prdytbl       = &OSRdyTbl[0];
    for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
        *prdytbl++ = 0;
     820:	11 92       	st	Z+, r1
#endif


    OSRdyGrp      = 0;                                     /* Clear the ready list                     */
    prdytbl       = &OSRdyTbl[0];
    for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
     822:	83 e0       	ldi	r24, 0x03	; 3
     824:	e4 31       	cpi	r30, 0x14	; 20
     826:	f8 07       	cpc	r31, r24
     828:	d9 f7       	brne	.-10     	; 0x820 <OSInit+0x6a>
        *prdytbl++ = 0;
    }

    OSPrioCur     = 0;
     82a:	10 92 c5 02 	sts	0x02C5, r1
    OSPrioHighRdy = 0;
     82e:	10 92 10 02 	sts	0x0210, r1

    OSTCBHighRdy  = (OS_TCB *)0;
     832:	10 92 08 03 	sts	0x0308, r1
     836:	10 92 07 03 	sts	0x0307, r1
    OSTCBCur      = (OS_TCB *)0;
     83a:	10 92 18 03 	sts	0x0318, r1
     83e:	10 92 17 03 	sts	0x0317, r1
    INT8U    i;
    OS_TCB  *ptcb1;
    OS_TCB  *ptcb2;


    OS_MemClr((INT8U *)&OSTCBTbl[0],     sizeof(OSTCBTbl));      /* Clear all the TCBs                 */
     842:	e9 e3       	ldi	r30, 0x39	; 57
     844:	f4 e0       	ldi	r31, 0x04	; 4
*/

void  OS_MemClr (INT8U *pdest, INT16U size)
{
    while (size > 0) {
        *pdest++ = (INT8U)0;
     846:	11 92       	st	Z+, r1
*********************************************************************************************************
*/

void  OS_MemClr (INT8U *pdest, INT16U size)
{
    while (size > 0) {
     848:	97 e0       	ldi	r25, 0x07	; 7
     84a:	e1 38       	cpi	r30, 0x81	; 129
     84c:	f9 07       	cpc	r31, r25
     84e:	d9 f7       	brne	.-10     	; 0x846 <OSInit+0x90>
    OS_TCB  *ptcb1;
    OS_TCB  *ptcb2;


    OS_MemClr((INT8U *)&OSTCBTbl[0],     sizeof(OSTCBTbl));      /* Clear all the TCBs                 */
    OS_MemClr((INT8U *)&OSTCBPrioTbl[0], sizeof(OSTCBPrioTbl));  /* Clear the priority table           */
     850:	e3 e8       	ldi	r30, 0x83	; 131
     852:	f7 e0       	ldi	r31, 0x07	; 7
*/

void  OS_MemClr (INT8U *pdest, INT16U size)
{
    while (size > 0) {
        *pdest++ = (INT8U)0;
     854:	11 92       	st	Z+, r1
****************************

⌨️ 快捷键说明

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