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

📄 os-task-switch.lis

📁 ucos-ii-at90S-icc-avr
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 02EA B1F0              breq L60
 02EC           X10:
 02EC                   .dbline 273
 02EC                   .dbline 274
 02EC           ;             if (--ptcb->OSTCBDly == 0) {                   /* Decrement nbr of ticks to end of delay   */
 02EC 802F              mov R24,R16
 02EE 912F              mov R25,R17
 02F0 0296              adiw R24,2
 02F2 E82F              mov R30,R24
 02F4 F92F              mov R31,R25
 02F6 8081              ldd R24,z+0
 02F8 9181              ldd R25,z+1
 02FA 0197              sbiw R24,1
 02FC 482E              mov R4,R24
 02FE 592E              mov R5,R25
 0300 4082              std z+0,R4
 0302 5182              std z+1,R5
 0304 8030              cpi R24,0
 0306 8907              cpc R24,R25
 0308 09F4              brne L62
 030A           X11:
 030A                   .dbline 274
 030A                   .dbline 278
 030A 06C0              rjmp L63
 030C           L62:
 030C                   .dbline 278
 030C           ; //                if (!(ptcb->OSTCBStat & OS_STAT_SUSPEND)) {    /* Is task suspended?                   */
 030C           ; //                    OSRdyGrp               |= ptcb->OSTCBBitY; /* No,  Make task Rdy to Run (timed out)*/
 030C           ; //                    OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
 030C           ;                 } else {                                       /* Yes, Leave 1 tick to prevent ...     */
 030C                   .dbline 279
 030C           ;                     ptcb->OSTCBDly = 1;                        /* ... loosing the task when the ...    */
 030C 81E0              ldi R24,1
 030E 90E0              ldi R25,0
 0310 E02F              mov R30,R16
 0312 F12F              mov R31,R17
 0314 8283              std z+2,R24
 0316 9383              std z+3,R25
 0318                   .dbline 280
 0318           ;                 }                                              /* ... suspension is removed.           */
 0318           L63:
 0318                   .dbline 281
 0318           ;             }//end OSTCBDly!=0
 0318           L60:
 0318                   .dbline 282
 0318           ;         }//end if(ptcb)
 0318           L58:
 0318                   .dbline 284
 0318           L55:
 0318                   .dbline 267
 0318 2395              inc R18
 031A           L57:
 031A                   .dbline 267
 031A 2230              cpi R18,2
 031C 08F4              brsh X12
 031E D1CF              rjmp L54
 0320           X12:
 0320                   .dbline -2
 0320                   .dbline 285
 0320           ;   //  OS_EXIT_CRITICAL();
 0320           ;     }//end for
 0320           ; }
 0320           L53:
 0320                   .dbline 0 ; func end
 0320 0895              ret
 0322                   .dbsym l ret 1 c
 0322                   .dbsym r ptcb 16 pX
 0322                   .dbsym r i 18 c
 0322                   .dbend
 0322                   .dbfunc e OSIntExit _OSIntExit fV
                        .even
 0322           _OSIntExit::
 0322                   .dbline -1
 0322                   .dbline 307
 0322           ; 
 0322           ; /*
 0322           ; *********************************************************************************************************
 0322           ; *                                               EXIT ISR
 0322           ; *
 0322           ; * Description: This function is used to notify uC/OS-II that you have completed serviving an ISR.  When 
 0322           ; *              the last nested ISR has completed, uC/OS-II will call the scheduler to determine whether
 0322           ; *              a new, high-priority task, is ready to run.
 0322           ; *
 0322           ; * Arguments  : none
 0322           ; *
 0322           ; * Returns    : none
 0322           ; *
 0322           ; * Notes      : 1) You MUST invoke OSIntEnter() and OSIntExit() in pair.  In other words, for every call
 0322           ; *                 to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() at the
 0322           ; *                 end of the ISR.
 0322           ; *              2) Rescheduling is prevented when the scheduler is locked (see OSSchedLock())
 0322           ; *********************************************************************************************************
 0322           ; */
 0322           ; 
 0322           ; void OSIntExit(void)
 0322           ; {
 0322                   .dbline 308
 0322           ;     OS_ENTER_CRITICAL();
 0322 0A93              st -y,r16
 0324 0FB7               in r16,0x3f
 0326 F894               cli
 0328 0F93               push r16
 032A 0991              ld r16,y+
 032C                   .dbline 308
 032C                   .dbline 309
 032C           ;     if ((--OSIntNesting | OSLockNesting) == 0) { /* Reschedule only if all ISRs completed & not locked */
 032C 80919901          lds R24,_OSIntNesting
 0330 8150              subi R24,1
 0332 282E              mov R2,R24
 0334 20929901          sts _OSIntNesting,R2
 0338 40909801          lds R4,_OSLockNesting
 033C 2428              or R2,R4
 033E 09F0              breq X15
 0340 36C0              rjmp L65
 0342           X15:
 0342                   .dbline 309
 0342                   .dbline 310
 0342           ;         OSPrioHighRdy=OSGetPrioRdy();
 0342 89DF              rcall _OSGetPrioRdy
 0344 00939601          sts _OSPrioHighRdy,R16
 0348                   .dbline 311
 0348           ;               if(OSPrioHighRdy>OS_LOWEST_PRIO)
 0348 82E0              ldi R24,2
 034A 8017              cp R24,R16
 034C 18F4              brsh L67
 034E                   .dbline 312
 034E           ;               {
 034E                   .dbline 314
 034E           ; #if OS_STRICT
 034E           ;                 OSError(0);
 034E 0027              clr R16
 0350 00D0              rcall _OSError
 0352                   .dbline 316
 0352 2DC0              rjmp L68
 0354           L67:
 0354                   .dbline 316
 0354           ; #endif
 0354           ;               }else if (OSPrioHighRdy != OSPrioCur) {         /* No context switch if current task is highest ready */
 0354 20909701          lds R2,_OSPrioCur
 0358 30909601          lds R3,_OSPrioHighRdy
 035C 3214              cp R3,R2
 035E 39F1              breq L69
 0360                   .dbline 316
 0360                   .dbline 317
 0360           ;             OSTCBHighRdy = OSpTCBList[OSPrioHighRdy];
 0360 80E0              ldi R24,<_OSpTCBList
 0362 90E0              ldi R25,>_OSpTCBList
 0364 E32D              mov R30,R3
 0366 FF27              clr R31
 0368 EE0F              lsl R30
 036A FF1F              rol R31
 036C E80F              add R30,R24
 036E F91F              adc R31,R25
 0370 2080              ldd R2,z+0
 0372 3180              ldd R3,z+1
 0374 30929301          sts _OSTCBHighRdy+1,R3
 0378 20929201          sts _OSTCBHighRdy,R2
 037C                   .dbline 319
 037C           ; #if OS_STRICT
 037C           ;                       if((0==OSTCBHighRdy)||(0==OSTCBCur)||
 037C 2220              tst R2
 037E 11F4              brne X13
 0380 3320              tst R3
 0382 89F0              breq L75
 0384           X13:
 0384 20909401          lds R2,_OSTCBCur
 0388 30909501          lds R3,_OSTCBCur+1
 038C 2220              tst R2
 038E 11F4              brne X14
 0390 3320              tst R3
 0392 49F0              breq L75
 0394           X14:
 0394 82E0              ldi R24,2
 0396 20909701          lds R2,_OSPrioCur
 039A 8215              cp R24,R2
 039C 20F0              brlo L75
 039E 20909601          lds R2,_OSPrioHighRdy
 03A2 8215              cp R24,R2
 03A4 10F4              brsh L71
 03A6           L75:
 03A6                   .dbline 321
 03A6           ;                          (OSPrioCur>OS_LOWEST_PRIO)||(OSPrioHighRdy>OS_LOWEST_PRIO))
 03A6           ;                         OSError(0);
 03A6 0027              clr R16
 03A8 00D0              rcall _OSError
 03AA           L71:
 03AA                   .dbline 323
 03AA           ; #endif                        
 03AA           ;             OSDebug();
 03AA 06D0              rcall _OSDebug
 03AC                   .dbline 324
 03AC           ;             OSIntCtxSw();                        /* Perform interrupt level context switch             */
 03AC 00D0              rcall _OSIntCtxSw
 03AE                   .dbline 325
 03AE           ;         }//end OSPrioHighRdy != OSPrioCur
 03AE           L69:
 03AE           L68:
 03AE                   .dbline 326
 03AE           ;     }//end nesting==0
 03AE           L65:
 03AE                   .dbline 327
 03AE           ;     OS_EXIT_CRITICAL();
 03AE 0A93              st -y,r16
 03B0 0F91              pop r16
 03B2 0FBF              out 0x3F,r16
 03B4 0991              ld r16,y+
 03B6                   .dbline 327
 03B6                   .dbline -2
 03B6                   .dbline 328
 03B6           ; }
 03B6           L64:
 03B6                   .dbline 0 ; func end
 03B6 0895              ret
 03B8                   .dbend
 03B8                   .dbfunc e OSDebug _OSDebug fV
 03B8           ;         port_a -> R16
                        .even
 03B8           _OSDebug::
 03B8                   .dbline -1
 03B8                   .dbline 331
 03B8           ; 
 03B8           ; void OSDebug(void)
 03B8           ; {
 03B8                   .dbline 334
 03B8           ; INT8U port_a;
 03B8           ;             //debug
 03B8           ;                       DDRA=0;port_a=PORTA;
 03B8 2224              clr R2
 03BA 2ABA              out 0x1a,R2
 03BC                   .dbline 334
 03BC 0BB3              in R16,0x1b
 03BE                   .dbline 335
 03BE           ;                       DDRA=0xff;PORTA=~port_a;
 03BE 8FEF              ldi R24,255
 03C0 8ABB              out 0x1a,R24
 03C2                   .dbline 335
 03C2 202E              mov R2,R16
 03C4 2094              com R2
 03C6 2BBA              out 0x1b,R2
 03C8                   .dbline -2
 03C8                   .dbline 337
 03C8           ;                       //end debug
 03C8           ; }
 03C8           L76:
 03C8                   .dbline 0 ; func end
 03C8 0895              ret
 03CA                   .dbsym r port_a 16 c
 03CA                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile G:\编程2002-10-15-HOME\做过的项目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\os-task-switch\os-task-switch.c
 0000           _stk_task3::
 0000                   .blkb 128
 0080                   .dbfile G:\编程2002-10-15-HOME\做过的项目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\os-task-switch/includes.h
 0080                   .dbsym e stk_task3 _stk_task3 A[128:128]c
 0080           _stk_task2::
 0080                   .blkb 128
 0100                   .dbsym e stk_task2 _stk_task2 A[128:128]c
 0100           _stk_task1::
 0100                   .blkb 128
 0180                   .dbsym e stk_task1 _stk_task1 A[128:128]c
 0180           _tcb_task3::
 0180                   .blkb 6
 0186                   .dbsym e tcb_task3 _tcb_task3 X
 0186           _tcb_task2::
 0186                   .blkb 6
 018C                   .dbsym e tcb_task2 _tcb_task2 X
 018C           _tcb_task1::
 018C                   .blkb 6
 0192                   .dbsym e tcb_task1 _tcb_task1 X
 0192           _OSTCBHighRdy::
 0192                   .blkb 2
 0194                   .dbfile G:\编程2002-10-15-HOME\做过的项目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\os-task-switch/os-task-switch.h
 0194                   .dbsym e OSTCBHighRdy _OSTCBHighRdy pX
 0194           _OSTCBCur::
 0194                   .blkb 2
 0196                   .dbsym e OSTCBCur _OSTCBCur pX
 0196           _OSPrioHighRdy::
 0196                   .blkb 1
 0197                   .dbsym e OSPrioHighRdy _OSPrioHighRdy c
 0197           _OSPrioCur::
 0197                   .blkb 1
 0198                   .dbsym e OSPrioCur _OSPrioCur c
 0198           _OSLockNesting::
 0198                   .blkb 1
 0199                   .dbsym e OSLockNesting _OSLockNesting c
 0199           _OSIntNesting::
 0199                   .blkb 1
 019A                   .dbsym e OSIntNesting _OSIntNesting c
 019A           _OSpTCBList::
 019A                   .blkb 6
 01A0                   .dbsym e OSpTCBList _OSpTCBList A[6:3]pX
 01A0           _OSRunning::
 01A0                   .blkb 1
 01A1                   .dbsym e OSRunning _OSRunning c

⌨️ 快捷键说明

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