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

📄 os_task.lis

📁 本程序中用到DS1302以及液晶等模块
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0156 5040              sbci R21,0
 0158 84E2              ldi R24,36
 015A F101              movw R30,R2
 015C 8083              std z+0,R24
 015E                   .dbline 95
 015E           ;     *stk-- = (INT8U)0x25;
 015E 1A01              movw R2,R20
 0160 4150              subi R20,1
 0162 5040              sbci R21,0
 0164 85E2              ldi R24,37
 0166 F101              movw R30,R2
 0168 8083              std z+0,R24
 016A                   .dbline 96
 016A           ;     *stk-- = (INT8U)0x26;
 016A 1A01              movw R2,R20
 016C 4150              subi R20,1
 016E 5040              sbci R21,0
 0170 86E2              ldi R24,38
 0172 F101              movw R30,R2
 0174 8083              std z+0,R24
 0176                   .dbline 97
 0176           ;     *stk-- = (INT8U)0x27;
 0176 1A01              movw R2,R20
 0178 4150              subi R20,1
 017A 5040              sbci R21,0
 017C 87E2              ldi R24,39
 017E F101              movw R30,R2
 0180 8083              std z+0,R24
 0182                   .dbline 99
 0182           ;       // the heap pointer Y=R29:R28 will not be stored
 0182           ;     *stk-- = (INT8U)0x30;
 0182 1A01              movw R2,R20
 0184 4150              subi R20,1
 0186 5040              sbci R21,0
 0188 80E3              ldi R24,48
 018A F101              movw R30,R2
 018C 8083              std z+0,R24
 018E                   .dbline 100
 018E           ;     *stk-- = (INT8U)0x31;
 018E 1A01              movw R2,R20
 0190 4150              subi R20,1
 0192 5040              sbci R21,0
 0194 81E3              ldi R24,49
 0196 F101              movw R30,R2
 0198 8083              std z+0,R24
 019A                   .dbline 102
 019A           ; //    *stk-- = (INT8U)0x3B;
 019A           ;     *stk-- = (INT8U)0x80;     //SREG = Interrupts enabled
 019A 1A01              movw R2,R20
 019C 4150              subi R20,1
 019E 5040              sbci R21,0
 01A0 80E8              ldi R24,128
 01A2 F101              movw R30,R2
 01A4 8083              std z+0,R24
 01A6                   .dbline 104
 01A6           ; 
 01A6           ;     tmp    = (INT16U)(stks);
 01A6 B501              movw R22,R10
 01A8                   .dbline 105
 01A8           ;     *stk-- = (OS_STK)(tmp >> 8);
 01A8 1A01              movw R2,R20
 01AA 4150              subi R20,1
 01AC 5040              sbci R21,0
 01AE 2B01              movw R4,R22
 01B0 452C              mov R4,R5
 01B2 5524              clr R5
 01B4 F101              movw R30,R2
 01B6 4082              std z+0,R4
 01B8                   .dbline 106
 01B8           ;     *stk   = (OS_STK)(tmp);
 01B8 FA01              movw R30,R20
 01BA 6083              std z+0,R22
 01BC                   .dbline 107
 01BC           ;     return ((void *)stk);
 01BC 042F              mov R16,R20
 01BE 152F              mov R17,R21
 01C0                   .dbline -2
 01C0           L2:
 01C0 0E940000          xcall pop_gset3
 01C4                   .dbline 0 ; func end
 01C4 0895              ret
 01C6                   .dbsym r stks 10 pc
 01C6                   .dbsym r tmp 22 i
 01C6                   .dbsym r stk 20 pc
 01C6                   .dbsym l opt 8 i
 01C6                   .dbsym l ptos 6 pc
 01C6                   .dbsym r pdata 18 pV
 01C6                   .dbsym r task 16 pfV
 01C6                   .dbend
 01C6                   .dbfunc e OSTaskCreate _OSTaskCreate fc
 01C6           ;            psp -> R20,R21
 01C6           ;            err -> R20
 01C6           ;           prio -> R22
 01C6           ;           ptos -> y+16
 01C6           ;          pdata -> R10,R11
 01C6           ;           task -> R20,R21
                        .even
 01C6           _OSTaskCreate::
 01C6 0E940000          xcall push_gset3
 01CA 5901              movw R10,R18
 01CC A801              movw R20,R16
 01CE 2A97              sbiw R28,10
 01D0 6A89              ldd R22,y+18
 01D2                   .dbline -1
 01D2                   .dbline 111
 01D2           ; }
 01D2           ; 
 01D2           ; INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
 01D2           ; {
 01D2                   .dbline 116
 01D2           ;     void   *psp;
 01D2           ;     INT8U   err;
 01D2           ; 
 01D2           ; 
 01D2           ;     if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range           */
 01D2 8FE0              ldi R24,15
 01D4 8617              cp R24,R22
 01D6 10F4              brsh L4
 01D8                   .dbline 116
 01D8                   .dbline 117
 01D8           ;         return (OS_PRIO_INVALID);
 01D8 0AE2              ldi R16,42
 01DA 72C0              xjmp L3
 01DC           L4:
 01DC                   .dbline 119
 01DC           ;     }
 01DC           ;     OS_ENTER_CRITICAL();
 01DC 0A93              st -y,r16
 01DE 0FB7              in r16,0x3f
 01E0 F894              cli
 01E2 0F93              push r16
 01E4 0991              ld r16,y+
 01E6                   .dbline 119
 01E6                   .dbline 120
 01E6           ;     if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority  */
 01E6 82E0              ldi R24,2
 01E8 869F              mul R24,R22
 01EA F001              movw R30,R0
 01EC 80E0              ldi R24,<_OSTCBPrioTbl
 01EE 90E0              ldi R25,>_OSTCBPrioTbl
 01F0 E80F              add R30,R24
 01F2 F91F              adc R31,R25
 01F4 2080              ldd R2,z+0
 01F6 3180              ldd R3,z+1
 01F8 2220              tst R2
 01FA 09F0              breq X1
 01FC 5CC0              xjmp L6
 01FE           X1:
 01FE 3320              tst R3
 0200 09F0              breq X2
 0202 59C0              xjmp L6
 0204           X2:
 0204           X0:
 0204                   .dbline 120
 0204                   .dbline 121
 0204           ;         OSTCBPrioTbl[prio] = (OS_TCB *)1;    /* Reserve the priority to prevent others from doing ...  */
 0204 82E0              ldi R24,2
 0206 869F              mul R24,R22
 0208 F001              movw R30,R0
 020A 80E0              ldi R24,<_OSTCBPrioTbl
 020C 90E0              ldi R25,>_OSTCBPrioTbl
 020E E80F              add R30,R24
 0210 F91F              adc R31,R25
 0212 81E0              ldi R24,1
 0214 90E0              ldi R25,0
 0216 8083              std z+0,R24
 0218 9183              std z+1,R25
 021A                   .dbline 123
 021A           ;                                              /* ... the same thing until task is created.              */
 021A           ;         OS_EXIT_CRITICAL();
 021A 0A93              st -y,r16
 021C 0F91              pop r16
 021E 0FBF              out 0x3F,r16
 0220 0991              ld r16,y+
 0222                   .dbline 123
 0222                   .dbline 124
 0222           ;         psp = (void *)OSTaskStkInit(task, pdata, ptos, 0); /* Initialize the task's stack              */
 0222 2224              clr R2
 0224 3324              clr R3
 0226 2A82              std y+2,R2
 0228 3B82              std y+3,R3
 022A 0888              ldd R0,y+16
 022C 1988              ldd R1,y+17
 022E 0882              std y+0,R0
 0230 1982              std y+1,R1
 0232 9501              movw R18,R10
 0234 8A01              movw R16,R20
 0236 E4DE              xcall _OSTaskStkInit
 0238 A801              movw R20,R16
 023A                   .dbline 125
 023A           ;         err = OSTCBInit(prio, psp, (void *)0, 0, 0, (void *)0, 0);         
 023A 2224              clr R2
 023C 3324              clr R3
 023E 2886              std y+8,R2
 0240 3986              std y+9,R3
 0242 2E82              std y+6,R2
 0244 3F82              std y+7,R3
 0246 2C82              std y+4,R2
 0248 3D82              std y+5,R3
 024A 2A82              std y+2,R2
 024C 3B82              std y+3,R3
 024E 2882              std y+0,R2
 0250 3982              std y+1,R3
 0252 9A01              movw R18,R20
 0254 062F              mov R16,R22
 0256 0E940000          xcall _OSTCBInit
 025A 402F              mov R20,R16
 025C                   .dbline 126
 025C           ;         if (err == OS_NO_ERR) {
 025C 0023              tst R16
 025E A9F4              brne L8
 0260                   .dbline 126
 0260                   .dbline 127
 0260           ;             OS_ENTER_CRITICAL();
 0260 0A93              st -y,r16
 0262 0FB7              in r16,0x3f
 0264 F894              cli
 0266 0F93              push r16
 0268 0991              ld r16,y+
 026A                   .dbline 127
 026A                   .dbline 128
 026A           ;             OSTaskCtr++;                                   /* Increment the #tasks counter             */
 026A 80910000          lds R24,_OSTaskCtr
 026E 8F5F              subi R24,255    ; addi 1
 0270 80930000          sts _OSTaskCtr,R24
 0274                   .dbline 129
 0274           ;             OS_EXIT_CRITICAL();
 0274 0A93              st -y,r16
 0276 0F91              pop r16
 0278 0FBF              out 0x3F,r16
 027A 0991              ld r16,y+
 027C                   .dbline 129
 027C                   .dbline 130
 027C           ;             if (OSRunning) {                 /* Find highest priority task if multitasking has started */
 027C 20900000          lds R2,_OSRunning
 0280 2220              tst R2
 0282 B9F0              breq L9
 0284                   .dbline 130
 0284                   .dbline 131
 0284           ;                 OSSched();
 0284 0E940000          xcall _OSSched
 0288                   .dbline 132
 0288           ;             }
 0288                   .dbline 133
 0288 14C0              xjmp L9
 028A           L8:
 028A                   .dbline 133
 028A           ;         } else {
 028A                   .dbline 134
 028A           ;             OS_ENTER_CRITICAL();
 028A 0A93              st -y,r16
 028C 0FB7              in r16,0x3f
 028E F894              cli
 0290 0F93              push r16
 0292 0991              ld r16,y+
 0294                   .dbline 134
 0294                   .dbline 135
 0294           ;             OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others                 */
 0294 82E0              ldi R24,2
 0296 869F              mul R24,R22
 0298 F001              movw R30,R0
 029A 80E0              ldi R24,<_OSTCBPrioTbl
 029C 90E0              ldi R25,>_OSTCBPrioTbl
 029E E80F              add R30,R24
 02A0 F91F              adc R31,R25
 02A2 2224              clr R2
 02A4 3324              clr R3
 02A6 2082              std z+0,R2
 02A8 3182              std z+1,R3
 02AA                   .dbline 136
 02AA           ;             OS_EXIT_CRITICAL();
 02AA 0A93              st -y,r16
 02AC 0F91              pop r16
 02AE 0FBF              out 0x3F,r16
 02B0 0991              ld r16,y+
 02B2                   .dbline 136
 02B2                   .dbline 137
 02B2           ;         }
 02B2           L9:
 02B2                   .dbline 138
 02B2           ;         return (err);
 02B2 042F              mov R16,R20
 02B4 05C0              xjmp L3
 02B6           L6:
 02B6                   .dbline 139
 02B6           ;     } else {
 02B6                   .dbline 140
 02B6           ;         OS_EXIT_CRITICAL();
 02B6 0A93              st -y,r16
 02B8 0F91              pop r16
 02BA 0FBF              out 0x3F,r16
 02BC 0991              ld r16,y+
 02BE                   .dbline 140
 02BE                   .dbline 141
 02BE           ;         return (OS_PRIO_EXIST);
 02BE 08E2              ldi R16,40
 02C0                   .dbline -2
 02C0           L3:
 02C0 2A96              adiw R28,10
 02C2 0E940000          xcall pop_gset3
 02C6                   .dbline 0 ; func end
 02C6 0895              ret
 02C8                   .dbsym r psp 20 pV
 02C8                   .dbsym r err 20 c
 02C8                   .dbsym r prio 22 c
 02C8                   .dbsym l ptos 16 pc
 02C8                   .dbsym r pdata 10 pV
 02C8                   .dbsym r task 20 pfV
 02C8                   .dbend

⌨️ 快捷键说明

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