?? ucos-ii.lss
字號:
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 + -