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

📄 os_task.lis

📁 使用mega8和iccavr编译器的一段ucos操作系统程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -