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

📄 ucos.s

📁 uCOS源码
💻 S
📖 第 1 页 / 共 5 页
字号:
 1000550:	e1a0e000 	mov	lr, r0    if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) {      /* Task no longer ready      */ 1000554:	e59f0070 	ldr	r0, [pc, #70]	; 10005cc <OSEventTaskWait+0x88> 1000558:	e24cb004 	sub	r11, r12, #4	; 0x4 100055c:	e594c000 	ldr	r12, [r4] 1000560:	e58ce00c 	str	lr, [r12, #12] 1000564:	e5dc1017 	ldrb	r1, [r12, #23] 1000568:	e5dc2018 	ldrb	r2, [r12, #24] 100056c:	e7d03001 	ldrb	r3, [r0, r1] 1000570:	e1c33002 	bic	r3, r3, r2 1000574:	e3530000 	cmp	r3, #0	; 0x0 1000578:	e7c13000 	strb	r3, [r1, r0] 100057c:	1a000004 	bne	1000594 <OSEventTaskWait+0x50>        OSRdyGrp &= ~OSTCBCur->OSTCBBitY; 1000580:	e59f1048 	ldr	r1, [pc, #48]	; 10005d0 <OSEventTaskWait+0x8c> 1000584:	e5dc2019 	ldrb	r2, [r12, #25] 1000588:	e5d13000 	ldrb	r3, [r1] 100058c:	e1c33002 	bic	r3, r3, r2 1000590:	e5c13000 	strb	r3, [r1]    }    pevent->OSEventTbl[OSTCBCur->OSTCBY] |= OSTCBCur->OSTCBBitX;          /* Put task in waiting list  */ 1000594:	e5941000 	ldr	r1, [r4] 1000598:	e5d1c017 	ldrb	r12, [r1, #23] 100059c:	e5d12018 	ldrb	r2, [r1, #24] 10005a0:	e28e0004 	add	r0, lr, #4	; 0x4 10005a4:	e7d0300c 	ldrb	r3, [r0, r12] 10005a8:	e1833002 	orr	r3, r3, r2 10005ac:	e7c0300c 	strb	r3, [r0, r12]    pevent->OSEventGrp                   |= OSTCBCur->OSTCBBitY; 10005b0:	e5941000 	ldr	r1, [r4] 10005b4:	e5de300d 	ldrb	r3, [lr, #13] 10005b8:	e5d12019 	ldrb	r2, [r1, #25] 10005bc:	e1833002 	orr	r3, r3, r2 10005c0:	e5ce300d 	strb	r3, [lr, #13] 10005c4:	e91ba810 	ldmdb	r11, {r4, r11, sp, pc} 10005c8:	010070b8 	streqh	r7, [r0, -r8] 10005cc:	010070ac 	tsteq	r0, r12, lsr #1 10005d0:	010070a8 	tsteq	r0, r8, lsr #1010005d4 <OSEventTO>: 10005d4:	e1a0c00d 	mov	r12, sp 10005d8:	e92dd800 	stmdb	sp!, {r11, r12, lr, pc}}#endif/*$PAGE*//***********************************************************************************************************                              MAKE TASK READY TO RUN BASED ON EVENT TIMEOUT** Description: This function is called by other uC/OS-II services to make a task ready to run because a*              timeout occurred.** Arguments  : pevent   is a pointer to the event control block which is readying a task.** Returns    : none** Note       : This function is INTERNAL to uC/OS-II and your application should not call it.**********************************************************************************************************/#if  (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_ENvoid  OSEventTO (OS_EVENT *pevent){    if ((pevent->OSEventTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { 10005dc:	e59fe050 	ldr	lr, [pc, #50]	; 1000634 <OSEventTO+0x60> 10005e0:	e59e3000 	ldr	r3, [lr] 10005e4:	e24cb004 	sub	r11, r12, #4	; 0x4 10005e8:	e5d3c017 	ldrb	r12, [r3, #23] 10005ec:	e5d31018 	ldrb	r1, [r3, #24] 10005f0:	e2802004 	add	r2, r0, #4	; 0x4 10005f4:	e7d2300c 	ldrb	r3, [r2, r12] 10005f8:	e1c33001 	bic	r3, r3, r1 10005fc:	e3530000 	cmp	r3, #0	; 0x0 1000600:	e7c2300c 	strb	r3, [r2, r12] 1000604:	1a000004 	bne	100061c <OSEventTO+0x48>        pevent->OSEventGrp &= ~OSTCBCur->OSTCBBitY; 1000608:	e59e3000 	ldr	r3, [lr] 100060c:	e5d0200d 	ldrb	r2, [r0, #13] 1000610:	e5d31019 	ldrb	r1, [r3, #25] 1000614:	e1c22001 	bic	r2, r2, r1 1000618:	e5c0200d 	strb	r2, [r0, #13]    }    OSTCBCur->OSTCBStat     = OS_STAT_RDY;       /* Set status to ready                                */ 100061c:	e59e3000 	ldr	r3, [lr] 1000620:	e3a01000 	mov	r1, #0	; 0x0 1000624:	e5c31014 	strb	r1, [r3, #20]    OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0;     /* No longer waiting for event                        */ 1000628:	e59e2000 	ldr	r2, [lr] 100062c:	e582100c 	str	r1, [r2, #12] 1000630:	e91ba800 	ldmdb	r11, {r11, sp, pc} 1000634:	010070b8 	streqh	r7, [r0, -r8]01000638 <OSEventWaitListInit>: 1000638:	e1a0c00d 	mov	r12, sp 100063c:	e92dd800 	stmdb	sp!, {r11, r12, lr, pc} 1000640:	e24cb004 	sub	r11, r12, #4	; 0x4}#endif/*$PAGE*//***********************************************************************************************************                                 INITIALIZE EVENT CONTROL BLOCK'S WAIT LIST** Description: This function is called by other uC/OS-II services to initialize the event wait list.** Arguments  : pevent    is a pointer to the event control block allocated to the event.** Returns    : none** Note       : This function is INTERNAL to uC/OS-II and your application should not call it.**********************************************************************************************************/#if  (OS_Q_EN && (OS_MAX_QS >= 2)) || OS_MBOX_EN || OS_SEM_ENvoid  OSEventWaitListInit (OS_EVENT *pevent){    INT8U i;            pevent->OSEventGrp = 0x00;                   /* No task waiting on event                           */ 1000644:	e3a03000 	mov	r3, #0	; 0x0    for (i = 0; i < OS_EVENT_TBL_SIZE; i++) { 1000648:	e1a02003 	mov	r2, r3 100064c:	e2801004 	add	r1, r0, #4	; 0x4 1000650:	e1a0c002 	mov	r12, r2 1000654:	e5c0300d 	strb	r3, [r0, #13] 1000658:	e2823001 	add	r3, r2, #1	; 0x1        pevent->OSEventTbl[i] = 0x00; 100065c:	e7c1c002 	strb	r12, [r1, r2] 1000660:	e20320ff 	and	r2, r3, #255	; 0xff 1000664:	e3520001 	cmp	r2, #1	; 0x1 1000668:	9afffffa 	bls	1000658 <OSEventWaitListInit+0x20>    }} 100066c:	e91ba800 	ldmdb	r11, {r11, sp, pc}01000670 <OSInit>: 1000670:	e1a0c00d 	mov	r12, sp 1000674:	e92dd810 	stmdb	sp!, {r4, r11, r12, lr, pc}#endif/*$PAGE*//***********************************************************************************************************                                             INITIALIZATION** Description: This function is used to initialize the internals of uC/OS-II and MUST be called prior to*              creating any uC/OS-II object and, prior to calling OSStart().** Arguments  : none** Returns    : none**********************************************************************************************************/void OSInit (void){    INT16U i;    OSTime        = 0L;                                    /* Clear the 32-bit system clock            */    OSIntNesting  = 0;                                     /* Clear the interrupt nesting counter      */    OSLockNesting = 0;                                     /* Clear the scheduling lock counter        */#if OS_TASK_CREATE_EN  || OS_TASK_CREATE_EXT_EN || OS_TASK_DEL_EN    OSTaskCtr     = 0;                                     /* Clear the number of tasks                */#endif    OSRunning     = FALSE;                                 /* Indicate that multitasking not started   */    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    OSCtxSwCtr    = 0;                                     /* Clear the context switch counter         */    OSRdyGrp      = 0;                                     /* Clear the ready list                     */    for (i = 0; i < OS_RDY_TBL_SIZE; i++) { 1000678:	e59fe118 	ldr	lr, [pc, #118]	; 1000798 <OSInit+0x128> 100067c:	e59f4118 	ldr	r4, [pc, #118]	; 100079c <OSInit+0x12c> 1000680:	e24cb004 	sub	r11, r12, #4	; 0x4 1000684:	e59fc114 	ldr	r12, [pc, #114]	; 10007a0 <OSInit+0x130> 1000688:	e59f2114 	ldr	r2, [pc, #114]	; 10007a4 <OSInit+0x134> 100068c:	e59f3114 	ldr	r3, [pc, #114]	; 10007a8 <OSInit+0x138> 1000690:	e3a01000 	mov	r1, #0	; 0x0 1000694:	e5821000 	str	r1, [r2] 1000698:	e5c31000 	strb	r1, [r3] 100069c:	e59f2108 	ldr	r2, [pc, #108]	; 10007ac <OSInit+0x13c> 10006a0:	e59f3108 	ldr	r3, [pc, #108]	; 10007b0 <OSInit+0x140> 10006a4:	e5c21000 	strb	r1, [r2] 10006a8:	e5c31000 	strb	r1, [r3] 10006ac:	e59f2100 	ldr	r2, [pc, #100]	; 10007b4 <OSInit+0x144> 10006b0:	e59f3100 	ldr	r3, [pc, #100]	; 10007b8 <OSInit+0x148> 10006b4:	e5c21000 	strb	r1, [r2] 10006b8:	e5831000 	str	r1, [r3] 10006bc:	e59f20f8 	ldr	r2, [pc, #f8]	; 10007bc <OSInit+0x14c> 10006c0:	e59f30f8 	ldr	r3, [pc, #f8]	; 10007c0 <OSInit+0x150> 10006c4:	e5821000 	str	r1, [r2] 10006c8:	e1a02001 	mov	r2, r1 10006cc:	e1a00002 	mov	r0, r2 10006d0:	e5c31000 	strb	r1, [r3]        OSRdyTbl[i] = 0; 10006d4:	e7cc0002 	strb	r0, [r12, r2] 10006d8:	e2822001 	add	r2, r2, #1	; 0x1 10006dc:	e3520001 	cmp	r2, #1	; 0x1 10006e0:	9afffffb 	bls	10006d4 <OSInit+0x64>    }                    OSPrioCur     = 0; 10006e4:	e59f30d8 	ldr	r3, [pc, #d8]	; 10007c4 <OSInit+0x154>    OSPrioHighRdy = 0;                                            10006e8:	e59f20d8 	ldr	r2, [pc, #d8]	; 10007c8 <OSInit+0x158> 10006ec:	e3a01000 	mov	r1, #0	; 0x0 10006f0:	e5c31000 	strb	r1, [r3] 10006f4:	e5c21000 	strb	r1, [r2]    OSTCBHighRdy  = (OS_TCB *)0;                                 /* TCB Initialization                 */ 10006f8:	e59f30cc 	ldr	r3, [pc, #cc]	; 10007cc <OSInit+0x15c>    OSTCBCur      = (OS_TCB *)0; 10006fc:	e59f20cc 	ldr	r2, [pc, #cc]	; 10007d0 <OSInit+0x160> 1000700:	e5831000 	str	r1, [r3] 1000704:	e5821000 	str	r1, [r2]    OSTCBList     = (OS_TCB *)0; 1000708:	e59f30c4 	ldr	r3, [pc, #c4]	; 10007d4 <OSInit+0x164>    for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) {                 /* Clear the priority table           */ 100070c:	e1a02001 	mov	r2, r1 1000710:	e5831000 	str	r1, [r3] 1000714:	e59f30bc 	ldr	r3, [pc, #bc]	; 10007d8 <OSInit+0x168>        OSTCBPrioTbl[i] = (OS_TCB *)0; 1000718:	e7831102 	str	r1, [r3, r2, lsl #2] 100071c:	e2822001 	add	r2, r2, #1	; 0x1 1000720:	e352000c 	cmp	r2, #12	; 0xc 1000724:	9afffffb 	bls	1000718 <OSInit+0xa8>    }    for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {  /* Init. list of free TCBs            */ 1000728:	e59f3068 	ldr	r3, [pc, #68]	; 1000798 <OSInit+0x128> 100072c:	e3a02000 	mov	r2, #0	; 0x0 1000730:	e2831004 	add	r1, r3, #4	; 0x4 1000734:	e283301c 	add	r3, r3, #28	; 0x1c        OSTCBTbl[i].OSTCBNext = &OSTCBTbl[i + 1]; 1000738:	e481301c 	str	r3, [r1], #28 100073c:	e283301c 	add	r3, r3, #28	; 0x1c 1000740:	e2822001 	add	r2, r2, #1	; 0x1 1000744:	e352000a 	cmp	r2, #10	; 0xa 1000748:	9afffffa 	bls	1000738 <OSInit+0xc8>    }    OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS - 1].OSTCBNext = (OS_TCB *)0;    /* Last OS_TCB             */ 100074c:	e3a02000 	mov	r2, #0	; 0x0 1000750:	e58e2138 	str	r2, [lr, #312]    OSTCBFreeList                                         = &OSTCBTbl[0]; 1000754:	e59f3080 	ldr	r3, [pc, #80]	; 10007dc <OSInit+0x16c>#if OS_MAX_EVENTS >= 2    for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {            /* Init. list of free EVENT control blocks  */ 1000758:	e59f003c 	ldr	r0, [pc, #3c]	; 100079c <OSInit+0x12c> 100075c:	e583e000 	str	lr, [r3] 1000760:	e2803010 	add	r3, r0, #16	; 0x10        OSEventTbl[i].OSEventPtr = (OS_EVENT *)&OSEventTbl[i + 1]; 1000764:	e7803202 	str	r3, [r0, r2, lsl #4] 1000768:	e2833010 	add	r3, r3, #16	; 0x10 100076c:	e2922001 	adds	r2, r2, #1	; 0x1 1000770:	0afffffb 	beq	1000764 <OSInit+0xf4>    }    OSEventTbl[OS_MAX_EVENTS - 1].OSEventPtr = (OS_EVENT *)0; 1000774:	e3a01000 	mov	r1, #0	; 0x0 1000778:	e5841010 	str	r1, [r4, #16]    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); 100077c:	e59f005c 	ldr	r0, [pc, #5c]	; 10007e0 <OSInit+0x170> 1000780:	e59f305c 	ldr	r3, [pc, #5c]	; 10007e4 <OSInit+0x174> 1000784:	e59f205c 	ldr	r2, [pc, #5c]	; 10007e8 <OSInit+0x178> 1000788:	e5834000 	str	r4, [r3] 100078c:	e3a0300c 	mov	r3, #12	; 0xc 1000790:	eb0001fe 	bl	1000f90 <OSTaskCreate>    #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    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, 

⌨️ 快捷键说明

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