?? os_task.lis
字號:
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 + -