📄 os_task.lis
字号:
0170 8083 std z+0,R24
0172 .dbline 93
0172 ; *stk-- = (INT8U)0x24;
0172 1501 movw R2,R10
0174 C101 movw R24,R2
0176 0197 sbiw R24,1
0178 5C01 movw R10,R24
017A 84E2 ldi R24,36
017C F101 movw R30,R2
017E 8083 std z+0,R24
0180 .dbline 94
0180 ; *stk-- = (INT8U)0x25;
0180 1501 movw R2,R10
0182 C101 movw R24,R2
0184 0197 sbiw R24,1
0186 5C01 movw R10,R24
0188 85E2 ldi R24,37
018A F101 movw R30,R2
018C 8083 std z+0,R24
018E .dbline 95
018E ; *stk-- = (INT8U)0x26;
018E 1501 movw R2,R10
0190 C101 movw R24,R2
0192 0197 sbiw R24,1
0194 5C01 movw R10,R24
0196 86E2 ldi R24,38
0198 F101 movw R30,R2
019A 8083 std z+0,R24
019C .dbline 96
019C ; *stk-- = (INT8U)0x27;
019C 1501 movw R2,R10
019E C101 movw R24,R2
01A0 0197 sbiw R24,1
01A2 5C01 movw R10,R24
01A4 87E2 ldi R24,39
01A6 F101 movw R30,R2
01A8 8083 std z+0,R24
01AA .dbline 98
01AA ; // the heap pointer Y=R29:R28 will not be stored
01AA ; *stk-- = (INT8U)0x30;
01AA 1501 movw R2,R10
01AC C101 movw R24,R2
01AE 0197 sbiw R24,1
01B0 5C01 movw R10,R24
01B2 80E3 ldi R24,48
01B4 F101 movw R30,R2
01B6 8083 std z+0,R24
01B8 .dbline 99
01B8 ; *stk-- = (INT8U)0x31;
01B8 1501 movw R2,R10
01BA C101 movw R24,R2
01BC 0197 sbiw R24,1
01BE 5C01 movw R10,R24
01C0 81E3 ldi R24,49
01C2 F101 movw R30,R2
01C4 8083 std z+0,R24
01C6 .dbline 101
01C6 ; // *stk-- = (INT8U)0x3B;
01C6 ; *stk-- = (INT8U)0x80; //SREG = Interrupts enabled
01C6 1501 movw R2,R10
01C8 C101 movw R24,R2
01CA 0197 sbiw R24,1
01CC 5C01 movw R10,R24
01CE 80E8 ldi R24,128
01D0 F101 movw R30,R2
01D2 8083 std z+0,R24
01D4 .dbline 103
01D4 ;
01D4 ; tmp = (INT16U)(stks);
01D4 6701 movw R12,R14
01D6 .dbline 104
01D6 ; *stk-- = (INT8U)(tmp >> 8);
01D6 1501 movw R2,R10
01D8 C101 movw R24,R2
01DA 0197 sbiw R24,1
01DC 5C01 movw R10,R24
01DE 2601 movw R4,R12
01E0 452C mov R4,R5
01E2 5524 clr R5
01E4 F101 movw R30,R2
01E6 4082 std z+0,R4
01E8 .dbline 105
01E8 ; *stk = (INT8U)(tmp);
01E8 FC01 movw R30,R24
01EA C082 std z+0,R12
01EC .dbline 106
01EC ; return ((void *)stk);
01EC 8C01 movw R16,R24
01EE .dbline -2
01EE L2:
01EE 00D0 rcall pop_gset5x
01F0 .dbline 0 ; func end
01F0 0895 ret
01F2 .dbsym r stks 14 pc
01F2 .dbsym r tmp 12 i
01F2 .dbsym r stk 10 pc
01F2 .dbsym l opt 8 i
01F2 .dbsym l ptos 6 pc
01F2 .dbsym r pdata 18 pV
01F2 .dbsym r task 16 pfV
01F2 .dbend
01F2 .dbfunc e OSTaskCreate _OSTaskCreate fc
01F2 ; psp -> R10,R11
01F2 ; err -> R10
01F2 ; prio -> R12
01F2 ; ptos -> y+16
01F2 ; pdata -> R14,R15
01F2 ; task -> R10,R11
.even
01F2 _OSTaskCreate::
01F2 00D0 rcall push_gset5x
01F4 7901 movw R14,R18
01F6 5801 movw R10,R16
01F8 2A97 sbiw R28,10
01FA CA88 ldd R12,y+18
01FC .dbline -1
01FC .dbline 110
01FC ; }
01FC ;
01FC ; INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
01FC ; {
01FC .dbline 115
01FC ; void *psp;
01FC ; INT8U err;
01FC ;
01FC ;
01FC ; if (prio > OS_LOWEST_PRIO) { /* Make sure priority is within allowable range */
01FC 8FE0 ldi R24,15
01FE 8C15 cp R24,R12
0200 10F4 brsh L4
0202 .dbline 115
0202 .dbline 116
0202 ; return (OS_PRIO_INVALID);
0202 0AE2 ldi R16,42
0204 70C0 rjmp L3
0206 L4:
0206 .dbline 118
0206 ; }
0206 ; OS_ENTER_CRITICAL();
0206 0A93 st -y,r16
0208 0FB7 in r16,0x3F
020A F894 cli
020C 0F93 push r16
020E 0991 ld r16,y+
0210 .dbline 118
0210 .dbline 119
0210 ; if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority */
0210 82E0 ldi R24,2
0212 8C9D mul R24,R12
0214 F001 movw R30,R0
0216 80E0 ldi R24,<_OSTCBPrioTbl
0218 90E0 ldi R25,>_OSTCBPrioTbl
021A E80F add R30,R24
021C F91F adc R31,R25
021E 2080 ldd R2,z+0
0220 3180 ldd R3,z+1
0222 2220 tst R2
0224 09F0 breq X1
0226 5AC0 rjmp L6
0228 X1:
0228 3320 tst R3
022A 09F0 breq X2
022C 57C0 rjmp L6
022E X2:
022E X0:
022E .dbline 119
022E .dbline 120
022E ; OSTCBPrioTbl[prio] = (OS_TCB *)1; /* Reserve the priority to prevent others from doing ... */
022E 82E0 ldi R24,2
0230 8C9D mul R24,R12
0232 F001 movw R30,R0
0234 80E0 ldi R24,<_OSTCBPrioTbl
0236 90E0 ldi R25,>_OSTCBPrioTbl
0238 E80F add R30,R24
023A F91F adc R31,R25
023C 81E0 ldi R24,1
023E 90E0 ldi R25,0
0240 9183 std z+1,R25
0242 8083 std z+0,R24
0244 .dbline 122
0244 ; /* ... the same thing until task is created. */
0244 ; OS_EXIT_CRITICAL();
0244 0A93 st -y,r16
0246 0F91 pop r16
0248 0FBF out 0x3F,r16
024A 0991 ld r16,y+
024C .dbline 122
024C .dbline 123
024C ; psp = (void *)OSTaskStkInit(task, pdata, ptos, 0); /* Initialize the task's stack */
024C 2224 clr R2
024E 3324 clr R3
0250 3B82 std y+3,R3
0252 2A82 std y+2,R2
0254 0888 ldd R0,y+16
0256 1988 ldd R1,y+17
0258 1982 std y+1,R1
025A 0882 std y+0,R0
025C 9701 movw R18,R14
025E 8501 movw R16,R10
0260 CFDE rcall _OSTaskStkInit
0262 5801 movw R10,R16
0264 .dbline 124
0264 ; err = OSTCBInit(prio, psp, (void *)0, 0, 0, (void *)0, 0);
0264 2224 clr R2
0266 3324 clr R3
0268 3986 std y+9,R3
026A 2886 std y+8,R2
026C 3F82 std y+7,R3
026E 2E82 std y+6,R2
0270 3D82 std y+5,R3
0272 2C82 std y+4,R2
0274 3B82 std y+3,R3
0276 2A82 std y+2,R2
0278 3982 std y+1,R3
027A 2882 std y+0,R2
027C 9501 movw R18,R10
027E 0C2D mov R16,R12
0280 00D0 rcall _OSTCBInit
0282 A02E mov R10,R16
0284 .dbline 125
0284 ; if (err == OS_NO_ERR) {
0284 0023 tst R16
0286 A1F4 brne L8
0288 .dbline 125
0288 .dbline 126
0288 ; OS_ENTER_CRITICAL();
0288 0A93 st -y,r16
028A 0FB7 in r16,0x3F
028C F894 cli
028E 0F93 push r16
0290 0991 ld r16,y+
0292 .dbline 126
0292 .dbline 127
0292 ; OSTaskCtr++; /* Increment the #tasks counter */
0292 80910000 lds R24,_OSTaskCtr
0296 8F5F subi R24,255 ; addi 1
0298 80930000 sts _OSTaskCtr,R24
029C .dbline 128
029C ; OS_EXIT_CRITICAL();
029C 0A93 st -y,r16
029E 0F91 pop r16
02A0 0FBF out 0x3F,r16
02A2 0991 ld r16,y+
02A4 .dbline 128
02A4 .dbline 129
02A4 ; if (OSRunning) { /* Find highest priority task if multitasking has started */
02A4 20900000 lds R2,_OSRunning
02A8 2220 tst R2
02AA B1F0 breq L9
02AC .dbline 129
02AC .dbline 130
02AC ; OSSched();
02AC 00D0 rcall _OSSched
02AE .dbline 131
02AE ; }
02AE .dbline 132
02AE 14C0 rjmp L9
02B0 L8:
02B0 .dbline 132
02B0 ; } else {
02B0 .dbline 133
02B0 ; OS_ENTER_CRITICAL();
02B0 0A93 st -y,r16
02B2 0FB7 in r16,0x3F
02B4 F894 cli
02B6 0F93 push r16
02B8 0991 ld r16,y+
02BA .dbline 133
02BA .dbline 134
02BA ; OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others */
02BA 82E0 ldi R24,2
02BC 8C9D mul R24,R12
02BE F001 movw R30,R0
02C0 80E0 ldi R24,<_OSTCBPrioTbl
02C2 90E0 ldi R25,>_OSTCBPrioTbl
02C4 E80F add R30,R24
02C6 F91F adc R31,R25
02C8 2224 clr R2
02CA 3324 clr R3
02CC 3182 std z+1,R3
02CE 2082 std z+0,R2
02D0 .dbline 135
02D0 ; OS_EXIT_CRITICAL();
02D0 0A93 st -y,r16
02D2 0F91 pop r16
02D4 0FBF out 0x3F,r16
02D6 0991 ld r16,y+
02D8 .dbline 135
02D8 .dbline 136
02D8 ; }
02D8 L9:
02D8 .dbline 137
02D8 ; return (err);
02D8 0A2D mov R16,R10
02DA 05C0 rjmp L3
02DC L6:
02DC .dbline 138
02DC ; } else {
02DC .dbline 139
02DC ; OS_EXIT_CRITICAL();
02DC 0A93 st -y,r16
02DE 0F91 pop r16
02E0 0FBF out 0x3F,r16
02E2 0991 ld r16,y+
02E4 .dbline 139
02E4 .dbline 140
02E4 ; return (OS_PRIO_EXIST);
02E4 08E2 ldi R16,40
02E6 .dbline -2
02E6 L3:
02E6 2A96 adiw R28,10
02E8 00D0 rcall pop_gset5x
02EA .dbline 0 ; func end
02EA 0895 ret
02EC .dbsym r psp 10 pV
02EC .dbsym r err 10 c
02EC .dbsym r prio 12 c
02EC .dbsym l ptos 16 pc
02EC .dbsym r pdata 14 pV
02EC .dbsym r task 10 pfV
02EC .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -