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

📄 os_task.lis

📁 ucos如何移植到单片机mega128
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02C8 E0910000          lds R30,_OSTCBCur
 02CC F0910100          lds R31,_OSTCBCur+1
 02D0 4189              ldd R20,z+17
 02D2                   .dbline 507
 02D2           ;         OS_EXIT_CRITICAL();
 02D2 0A93              st -y,r16
 02D4 0F91              pop r16
 02D6 0FBF              out 0x3F,r16
 02D8 0991              ld r16,y+
 02DA                   .dbline 507
 02DA                   .dbline 508
 02DA           ;         return (stat);
 02DA 042F              mov R16,R20
 02DC 1CC0              xjmp L33
 02DE           L38:
 02DE                   .dbline 510
 02DE           ;     }
 02DE           ;     OS_ENTER_CRITICAL();
 02DE 0A93              st -y,r16
 02E0 0FB7              in r16,0x3F
 02E2 F894              cli
 02E4 0F93              push r16
 02E6 0991              ld r16,y+
 02E8                   .dbline 510
 02E8                   .dbline 511
 02E8           ;     ptcb = OSTCBPrioTbl[prio];
 02E8 82E0              ldi R24,2
 02EA 809F              mul R24,R16
 02EC F001              movw R30,R0
 02EE 80E0              ldi R24,<_OSTCBPrioTbl
 02F0 90E0              ldi R25,>_OSTCBPrioTbl
 02F2 E80F              add R30,R24
 02F4 F91F              adc R31,R25
 02F6 4081              ldd R20,z+0
 02F8 5181              ldd R21,z+1
 02FA                   .dbline 512
 02FA           ;     if (ptcb != (OS_TCB *)0) {                                  /* Task to delete must exist           */
 02FA 4030              cpi R20,0
 02FC 4507              cpc R20,R21
 02FE 29F0              breq L40
 0300           X7:
 0300                   .dbline 512
 0300                   .dbline 513
 0300           ;         ptcb->OSTCBDelReq = OS_TASK_DEL_REQ;                    /* Set flag indicating task to be DEL. */
 0300 8EE3              ldi R24,62
 0302 FA01              movw R30,R20
 0304 818B              std z+17,R24
 0306                   .dbline 514
 0306           ;         err               = OS_NO_ERR;
 0306 4427              clr R20
 0308                   .dbline 515
 0308 01C0              xjmp L41
 030A           L40:
 030A                   .dbline 515
 030A           ;     } else {
 030A                   .dbline 516
 030A           ;         err               = OS_TASK_NOT_EXIST;                  /* Task must be deleted                */
 030A 4BE0              ldi R20,11
 030C                   .dbline 517
 030C           ;     }
 030C           L41:
 030C                   .dbline 518
 030C           ;     OS_EXIT_CRITICAL();
 030C 0A93              st -y,r16
 030E 0F91              pop r16
 0310 0FBF              out 0x3F,r16
 0312 0991              ld r16,y+
 0314                   .dbline 518
 0314                   .dbline 519
 0314           ;     return (err);
 0314 042F              mov R16,R20
 0316                   .dbline -2
 0316           L33:
 0316 0E940000          xcall pop_gset1
 031A                   .dbline 0 ; func end
 031A 0895              ret
 031C                   .dbsym r stat 20 c
 031C                   .dbsym r err 20 c
 031C                   .dbsym r ptcb 20 pS[os_tcb]
 031C                   .dbsym r prio 16 c
 031C                   .dbend
 031C                   .dbfunc e OSTaskResume _OSTaskResume fc
 031C           ;           ptcb -> R20,R21
 031C           ;           prio -> R20
                        .even
 031C           _OSTaskResume::
 031C 0E940000          xcall push_gset1
 0320 402F              mov R20,R16
 0322                   .dbline -1
 0322                   .dbline 542
 0322           ; }
 0322           ; #endif
 0322           ; /*$PAGE*/
 0322           ; /*
 0322           ; *********************************************************************************************************
 0322           ; *                                        RESUME A SUSPENDED TASK
 0322           ; *
 0322           ; * Description: This function is called to resume a previously suspended task.  This is the only call that
 0322           ; *              will remove an explicit task suspension.
 0322           ; *
 0322           ; * Arguments  : prio     is the priority of the task to resume.
 0322           ; *
 0322           ; * Returns    : OS_NO_ERR                if the requested task is resumed
 0322           ; *              OS_PRIO_INVALID          if the priority you specify is higher that the maximum allowed
 0322           ; *                                       (i.e. >= OS_LOWEST_PRIO)
 0322           ; *              OS_TASK_RESUME_PRIO      if the task to resume does not exist
 0322           ; *              OS_TASK_NOT_SUSPENDED    if the task to resume has not been suspended
 0322           ; *********************************************************************************************************
 0322           ; */
 0322           ; 
 0322           ; #if OS_TASK_SUSPEND_EN > 0
 0322           ; INT8U  OSTaskResume (INT8U prio)
 0322           ; {
 0322                   .dbline 550
 0322           ; #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
 0322           ;     OS_CPU_SR  cpu_sr;
 0322           ; #endif
 0322           ;     OS_TCB    *ptcb;
 0322           ; 
 0322           ; 
 0322           ; #if OS_ARG_CHK_EN > 0
 0322           ;     if (prio >= OS_LOWEST_PRIO) {                               /* Make sure task priority is valid    */
 0322 4431              cpi R20,20
 0324 10F0              brlo L43
 0326                   .dbline 550
 0326                   .dbline 551
 0326           ;         return (OS_PRIO_INVALID);
 0326 0AE2              ldi R16,42
 0328 52C0              xjmp L42
 032A           L43:
 032A                   .dbline 554
 032A           ;     }
 032A           ; #endif
 032A           ;     OS_ENTER_CRITICAL();
 032A 0A93              st -y,r16
 032C 0FB7              in r16,0x3F
 032E F894              cli
 0330 0F93              push r16
 0332 0991              ld r16,y+
 0334                   .dbline 554
 0334                   .dbline 555
 0334           ;     ptcb = OSTCBPrioTbl[prio];
 0334 82E0              ldi R24,2
 0336 849F              mul R24,R20
 0338 F001              movw R30,R0
 033A 80E0              ldi R24,<_OSTCBPrioTbl
 033C 90E0              ldi R25,>_OSTCBPrioTbl
 033E E80F              add R30,R24
 0340 F91F              adc R31,R25
 0342 4081              ldd R20,z+0
 0344 5181              ldd R21,z+1
 0346                   .dbline 556
 0346           ;     if (ptcb == (OS_TCB *)0) {                                  /* Task to suspend must exist          */
 0346 4030              cpi R20,0
 0348 4507              cpc R20,R21
 034A 31F4              brne L45
 034C           X8:
 034C                   .dbline 556
 034C                   .dbline 557
 034C           ;         OS_EXIT_CRITICAL();
 034C 0A93              st -y,r16
 034E 0F91              pop r16
 0350 0FBF              out 0x3F,r16
 0352 0991              ld r16,y+
 0354                   .dbline 557
 0354                   .dbline 558
 0354           ;         return (OS_TASK_RESUME_PRIO);
 0354 04E6              ldi R16,100
 0356 3BC0              xjmp L42
 0358           L45:
 0358                   .dbline 560
 0358           ;     }
 0358           ;     if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) {              /* Task must be suspended   */
 0358 FA01              movw R30,R20
 035A 2384              ldd R2,z+11
 035C 23FE              sbrs R2,3
 035E 32C0              rjmp L47
 0360                   .dbline 560
 0360                   .dbline 561
 0360           ;         if (((ptcb->OSTCBStat &= ~OS_STAT_SUSPEND) == OS_STAT_RDY) &&      /* Remove suspension        */
 0360 CA01              movw R24,R20
 0362 0B96              adiw R24,11
 0364 FC01              movw R30,R24
 0366 8081              ldd R24,z+0
 0368 877F              andi R24,247
 036A 482E              mov R4,R24
 036C 4082              std z+0,R4
 036E 8823              tst R24
 0370 09F0              breq X10
 0372 22C0              xjmp L49
 0374           X10:
 0374 FA01              movw R30,R20
 0376 2184              ldd R2,z+9
 0378 3284              ldd R3,z+10
 037A 2220              tst R2
 037C E9F4              brne L49
 037E 3320              tst R3
 0380 D9F4              brne L49
 0382           X9:
 0382                   .dbline 562
 0382           ;              (ptcb->OSTCBDly  == 0)) {                                     /* Must not be delayed      */
 0382                   .dbline 563
 0382           ;             OSRdyGrp               |= ptcb->OSTCBBitY;                     /* Make task ready to run   */
 0382 FA01              movw R30,R20
 0384 2088              ldd R2,z+16
 0386 30900000          lds R3,_OSRdyGrp
 038A 3228              or R3,R2
 038C 30920000          sts _OSRdyGrp,R3
 0390                   .dbline 564
 0390           ;             OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
 0390 80E0              ldi R24,<_OSRdyTbl
 0392 90E0              ldi R25,>_OSRdyTbl
 0394 FA01              movw R30,R20
 0396 2684              ldd R2,z+14
 0398 3324              clr R3
 039A 280E              add R2,R24
 039C 391E              adc R3,R25
 039E FA01              movw R30,R20
 03A0 4784              ldd R4,z+15
 03A2 F101              movw R30,R2
 03A4 5080              ldd R5,z+0
 03A6 5428              or R5,R4
 03A8 5082              std z+0,R5
 03AA                   .dbline 565
 03AA           ;             OS_EXIT_CRITICAL();
 03AA 0A93              st -y,r16
 03AC 0F91              pop r16
 03AE 0FBF              out 0x3F,r16
 03B0 0991              ld r16,y+
 03B2                   .dbline 565
 03B2                   .dbline 566
 03B2           ;             OS_Sched();
 03B2 0E940000          xcall _OS_Sched
 03B6                   .dbline 567
 03B6 04C0              xjmp L50
 03B8           L49:
 03B8                   .dbline 567
 03B8           ;         } else {
 03B8                   .dbline 568
 03B8           ;             OS_EXIT_CRITICAL();
 03B8 0A93              st -y,r16
 03BA 0F91              pop r16
 03BC 0FBF              out 0x3F,r16
 03BE 0991              ld r16,y+
 03C0                   .dbline 568
 03C0                   .dbline 569
 03C0           ;         }
 03C0           L50:
 03C0                   .dbline 570
 03C0           ;         return (OS_NO_ERR);
 03C0 0027              clr R16
 03C2 05C0              xjmp L42
 03C4           L47:
 03C4                   .dbline 572
 03C4           ;     }
 03C4           ;     OS_EXIT_CRITICAL();
 03C4 0A93              st -y,r16
 03C6 0F9

⌨️ 快捷键说明

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