📄 os_task.lis
字号:
00BA ; if ((OSRdyTbl[ptcb->OSTCBY] & ptcb->OSTCBBitX) != 0x00) { /* If task is ready make it not */
00BA 80E0 ldi R24,<_OSRdyTbl
00BC 90E0 ldi R25,>_OSRdyTbl
00BE F601 movw R30,R12
00C0 E585 ldd R30,z+13
00C2 FF27 clr R31
00C4 E80F add R30,R24
00C6 F91F adc R31,R25
00C8 2080 ldd R2,z+0
00CA F601 movw R30,R12
00CC 3684 ldd R3,z+14
00CE 2320 and R2,R3
00D0 09F4 brne X4
00D2 27C0 rjmp L10
00D4 X4:
00D4 .dbline 83
00D4 .dbline 84
00D4 ; if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) {
00D4 F601 movw R30,R12
00D6 2584 ldd R2,z+13
00D8 3324 clr R3
00DA 280E add R2,R24
00DC 391E adc R3,R25
00DE F601 movw R30,R12
00E0 4684 ldd R4,z+14
00E2 4094 com R4
00E4 F101 movw R30,R2
00E6 5080 ldd R5,z+0
00E8 5420 and R5,R4
00EA 452C mov R4,R5
00EC 4082 std z+0,R4
00EE 5520 tst R5
00F0 41F4 brne L12
00F2 .dbline 84
00F2 .dbline 85
00F2 ; OSRdyGrp &= ~ptcb->OSTCBBitY;
00F2 F601 movw R30,R12
00F4 2784 ldd R2,z+15
00F6 2094 com R2
00F8 30900000 lds R3,_OSRdyGrp
00FC 3220 and R3,R2
00FE 30920000 sts _OSRdyGrp,R3
0102 .dbline 86
0102 ; }
0102 L12:
0102 .dbline 87
0102 ; OSRdyGrp |= bity; /* Make new priority ready to run */
0102 20900000 lds R2,_OSRdyGrp
0106 2E28 or R2,R14
0108 20920000 sts _OSRdyGrp,R2
010C .dbline 88
010C ; OSRdyTbl[y] |= bitx;
010C 80E0 ldi R24,<_OSRdyTbl
010E 90E0 ldi R25,>_OSRdyTbl
0110 2980 ldd R2,y+1
0112 3324 clr R3
0114 280E add R2,R24
0116 391E adc R3,R25
0118 F101 movw R30,R2
011A 4080 ldd R4,z+0
011C 4A28 or R4,R10
011E 4082 std z+0,R4
0120 .dbline 90
0120 32C0 rjmp L11
0122 L10:
0122 .dbline 90
0122 ; #if OS_EVENT_EN > 0
0122 ; } else {
0122 .dbline 91
0122 ; if ((pevent = ptcb->OSTCBEventPtr) != (OS_EVENT *)0) { /* Remove from event wait list */
0122 F601 movw R30,R12
0124 2680 ldd R2,z+6
0126 3780 ldd R3,z+7
0128 A101 movw R20,R2
012A 4030 cpi R20,0
012C 4507 cpc R20,R21
012E 09F4 brne X5
0130 2AC0 rjmp L14
0132 X5:
0132 X2:
0132 .dbline 91
0132 .dbline 92
0132 ; if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {
0132 CA01 movw R24,R20
0134 0696 adiw R24,6
0136 F601 movw R30,R12
0138 2584 ldd R2,z+13
013A 3324 clr R3
013C 280E add R2,R24
013E 391E adc R3,R25
0140 F601 movw R30,R12
0142 4684 ldd R4,z+14
0144 4094 com R4
0146 F101 movw R30,R2
0148 5080 ldd R5,z+0
014A 5420 and R5,R4
014C 452C mov R4,R5
014E 4082 std z+0,R4
0150 5520 tst R5
0152 49F4 brne L16
0154 .dbline 92
0154 .dbline 93
0154 ; pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
0154 CA01 movw R24,R20
0156 0196 adiw R24,1
0158 F601 movw R30,R12
015A 4784 ldd R4,z+15
015C 4094 com R4
015E FC01 movw R30,R24
0160 5080 ldd R5,z+0
0162 5420 and R5,R4
0164 5082 std z+0,R5
0166 .dbline 94
0166 ; }
0166 L16:
0166 .dbline 95
0166 ; pevent->OSEventGrp |= bity; /* Add new priority to wait list */
0166 CA01 movw R24,R20
0168 0196 adiw R24,1
016A FC01 movw R30,R24
016C 4080 ldd R4,z+0
016E 4E28 or R4,R14
0170 4082 std z+0,R4
0172 .dbline 96
0172 ; pevent->OSEventTbl[y] |= bitx;
0172 CA01 movw R24,R20
0174 0696 adiw R24,6
0176 2980 ldd R2,y+1
0178 3324 clr R3
017A 280E add R2,R24
017C 391E adc R3,R25
017E F101 movw R30,R2
0180 4080 ldd R4,z+0
0182 4A28 or R4,R10
0184 4082 std z+0,R4
0186 .dbline 97
0186 ; }
0186 L14:
0186 .dbline 99
0186 ; #endif
0186 ; }
0186 L11:
0186 .dbline 100
0186 ; OSTCBPrioTbl[newprio] = ptcb; /* Place pointer to TCB @ new priority */
0186 82E0 ldi R24,2
0188 0C84 ldd R0,y+12
018A 809D mul R24,R0
018C F001 movw R30,R0
018E 80E0 ldi R24,<_OSTCBPrioTbl
0190 90E0 ldi R25,>_OSTCBPrioTbl
0192 E80F add R30,R24
0194 F91F adc R31,R25
0196 D182 std z+1,R13
0198 C082 std z+0,R12
019A .dbline 101
019A ; ptcb->OSTCBPrio = newprio; /* Set new task priority */
019A F601 movw R30,R12
019C 0C84 ldd R0,y+12
019E 0386 std z+11,R0
01A0 .dbline 102
01A0 ; ptcb->OSTCBY = y;
01A0 F601 movw R30,R12
01A2 0980 ldd R0,y+1
01A4 0586 std z+13,R0
01A6 .dbline 103
01A6 ; ptcb->OSTCBX = x;
01A6 F601 movw R30,R12
01A8 6487 std z+12,R22
01AA .dbline 104
01AA ; ptcb->OSTCBBitY = bity;
01AA F601 movw R30,R12
01AC E786 std z+15,R14
01AE .dbline 105
01AE ; ptcb->OSTCBBitX = bitx;
01AE F601 movw R30,R12
01B0 A686 std z+14,R10
01B2 .dbline 106
01B2 ; OS_EXIT_CRITICAL();
01B2 0881 ldd R16,y+0
01B4 00D0 rcall _OS_CPU_SR_Restore
01B6 .dbline 107
01B6 ; OS_Sched(); /* Run highest priority task ready */
01B6 00D0 rcall _OS_Sched
01B8 .dbline 108
01B8 ; return (OS_NO_ERR);
01B8 0027 clr R16
01BA 0FC0 rjmp L3
01BC L8:
01BC .dbline 109
01BC ; } else {
01BC .dbline 110
01BC ; OSTCBPrioTbl[newprio] = (OS_TCB *)0; /* Release the reserved prio. */
01BC 82E0 ldi R24,2
01BE 0C84 ldd R0,y+12
01C0 809D mul R24,R0
01C2 F001 movw R30,R0
01C4 80E0 ldi R24,<_OSTCBPrioTbl
01C6 90E0 ldi R25,>_OSTCBPrioTbl
01C8 E80F add R30,R24
01CA F91F adc R31,R25
01CC 2224 clr R2
01CE 3324 clr R3
01D0 3182 std z+1,R3
01D2 2082 std z+0,R2
01D4 .dbline 111
01D4 ; OS_EXIT_CRITICAL();
01D4 0881 ldd R16,y+0
01D6 00D0 rcall _OS_CPU_SR_Restore
01D8 .dbline 112
01D8 ; return (OS_PRIO_ERR); /* Task to change didn't exist */
01D8 09E2 ldi R16,41
01DA .dbline -2
01DA L3:
01DA 2296 adiw R28,2
01DC 00D0 rcall pop_gset5
01DE 2296 adiw R28,2
01E0 .dbline 0 ; func end
01E0 0895 ret
01E2 .dbsym r pevent 20 pS[.1]
01E2 .dbsym r bity 14 c
01E2 .dbsym r bitx 10 c
01E2 .dbsym r x 22 c
01E2 .dbsym l y 1 c
01E2 .dbsym l cpu_sr 0 c
01E2 .dbsym r ptcb 12 pS[os_tcb]
01E2 .dbsym l newprio 12 c
01E2 .dbsym r oldprio 20 c
01E2 .dbend
01E2 .dbfunc e OSTaskCreate _OSTaskCreate fc
01E2 ; psp -> R12,R13
01E2 ; err -> R12
01E2 ; cpu_sr -> R10
01E2 ; prio -> R14
01E2 ; ptos -> y+24
01E2 ; pdata -> y+22
01E2 ; task -> R12,R13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -