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

📄 os-task-switch.lis

📁 ucos-ii-at90S-icc-avr
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 021C 00D0              rcall _OSStartHighRdy
 021E                   .dbline 188
 021E           ;     }
 021E 02C0              rjmp L35
 0220           L34:
 0220                   .dbline 190
 0220 0027              clr R16
 0222 00D0              rcall _OSError
 0224           L35:
 0224                   .dbline -2
 0224                   .dbline 192
 0224           ; #if OS_STRICT
 0224           ;       else OSError(0);
 0224           ; #endif
 0224           ; }
 0224           L33:
 0224                   .dbline 0 ; func end
 0224 0895              ret
 0226                   .dbend
 0226                   .dbfunc e OSTimeDly _OSTimeDly fV
 0226           ;          ticks -> R20,R21
                        .even
 0226           _OSTimeDly::
 0226 00D0              rcall push_gset1
 0228 402F              mov R20,R16
 022A 512F              mov R21,R17
 022C                   .dbline -1
 022C                   .dbline 211
 022C                   .dbline 212
 022C 4030              cpi R20,0
 022E 4507              cpc R20,R21
 0230 81F0              breq L39
 0232           X5:
 0232                   .dbline 212
 0232                   .dbline 213
 0232 0A93              st -y,r16
 0234 0FB7               in r16,0x3f
 0236 F894               cli
 0238 0F93               push r16
 023A 0991              ld r16,y+
 023C                   .dbline 213
 023C                   .dbline 214
 023C E0919D01          lds R30,_OSTCBCur
 0240 F0919E01          lds R31,_OSTCBCur+1
 0244 4283              std z+2,R20
 0246 5383              std z+3,R21
 0248                   .dbline 215
 0248 0A93              st -y,r16
 024A 0F91              pop r16
 024C 0FBF              out 0x3F,r16
 024E 0991              ld r16,y+
 0250                   .dbline 215
 0250                   .dbline 216
 0250 90DF              rcall _OSSched
 0252                   .dbline 217
 0252           L39:
 0252                   .dbline -2
 0252                   .dbline 218
 0252           ; 
 0252           ; /*
 0252           ; *********************************************************************************************************
 0252           ; *                                DELAY TASK 'n' TICKS   (n from 0 to 65535)
 0252           ; *
 0252           ; * Description: This function is called to delay execution of the currently running task until the 
 0252           ; *              specified number of system ticks expires.  This, of course, directly equates to delaying
 0252           ; *              the current task for some time to expire.  No delay will result If the specified delay is 
 0252           ; *              0.  If the specified delay is greater than 0 then, a context switch will result.
 0252           ; *
 0252           ; * Arguments  : ticks     is the time delay that the task will be suspended in number of clock 'ticks'.  
 0252           ; *                        Note that by specifying 0, the task will not be delayed.
 0252           ; *
 0252           ; * Returns    : none
 0252           ; *********************************************************************************************************
 0252           ; */
 0252           ; 
 0252           ; void OSTimeDly (INT16U ticks)
 0252           ; {
 0252           ;     if (ticks > 0) {                                                      /* 0 means no delay!         */
 0252           ;         OS_ENTER_CRITICAL();
 0252           ;         OSTCBCur->OSTCBDly = ticks;                                       /* Load ticks in TCB         */
 0252           ;         OS_EXIT_CRITICAL();
 0252           ;         OSSched();                                                        /* Find next task to run!    */
 0252           ;     }
 0252           ; }
 0252           L38:
 0252 00D0              rcall pop_gset1
 0254                   .dbline 0 ; func end
 0254 0895              ret
 0256                   .dbsym r ticks 20 i
 0256                   .dbend
 0256                   .dbfunc e OSGetPrioRdy _OSGetPrioRdy fc
 0256           ;            ret -> R20
 0256           ;           ptcb -> R10,R11
 0256           ;              i -> R22
                        .even
 0256           _OSGetPrioRdy::
 0256 00D0              rcall push_gset3
 0258                   .dbline -1
 0258                   .dbline 221
 0258           ; /*return tcb's prio which OSTCBDly==0*/
 0258           ; INT8U OSGetPrioRdy(void)
 0258           ; {
 0258                   .dbline 222
 0258           ;   INT8U i,ret=0xff;
 0258 4FEF              ldi R20,255
 025A                   .dbline 224
 025A           ;   OS_TCB *ptcb;
 025A           ;   for(i=0;i<OS_TASK_COUNT;i++)
 025A 6627              clr R22
 025C 40C0              rjmp L45
 025E           L42:
 025E                   .dbline 225
 025E           ;   {
 025E                   .dbline 226
 025E           ;     ptcb=OSpTCBList[i];
 025E 80E0              ldi R24,<_OSpTCBList
 0260 90E0              ldi R25,>_OSpTCBList
 0262 E62F              mov R30,R22
 0264 FF27              clr R31
 0266 EE0F              lsl R30
 0268 FF1F              rol R31
 026A E80F              add R30,R24
 026C F91F              adc R31,R25
 026E A080              ldd R10,z+0
 0270 B180              ldd R11,z+1
 0272                   .dbline 228
 0272           ;     //OS_ENTER_CRITICAL();
 0272           ;     if(ptcb)
 0272 AA20              tst R10
 0274 19F4              brne X6
 0276 BB20              tst R11
 0278 09F4              brne X8
 027A 30C0              rjmp L46
 027C           X8:
 027C           X6:
 027C                   .dbline 229
 027C           ;       {
 027C                   .dbline 230
 027C           ;         if(0==ptcb->OSTCBDly)
 027C EA2D              mov R30,R10
 027E FB2D              mov R31,R11
 0280 2280              ldd R2,z+2
 0282 3380              ldd R3,z+3
 0284 2220              tst R2
 0286 09F0              breq X9
 0288 29C0              rjmp L48
 028A           X9:
 028A 3320              tst R3
 028C 09F0              breq X10
 028E 26C0              rjmp L48
 0290           X10:
 0290           X7:
 0290                   .dbline 231
 0290           ;         {
 0290                   .dbline 232
 0290           ;         if(OS_STAT_RDY==ptcb->OSTCBStat)
 0290 EA2D              mov R30,R10
 0292 FB2D              mov R31,R11
 0294 8481              ldd R24,z+4
 0296 8130              cpi R24,1
 0298 71F4              brne L50
 029A                   .dbline 233
 029A           ;         {
 029A                   .dbline 235
 029A           ; #if OS_STRICT
 029A           ;           if(i!=ptcb->OSTCBPrio)
 029A 2580              ldd R2,z+5
 029C 6215              cp R22,R2
 029E 11F0              breq L52
 02A0                   .dbline 236
 02A0           ;                 OSError(0);
 02A0 0027              clr R16
 02A2 00D0              rcall _OSError
 02A4           L52:
 02A4                   .dbline 238
 02A4           ; #endif  
 02A4           ;         ret=ptcb->OSTCBPrio;     
 02A4 EA2D              mov R30,R10
 02A6 FB2D              mov R31,R11
 02A8 4581              ldd R20,z+5
 02AA                   .dbline 240
 02AA           ; #if OS_STRICT
 02AA           ;               if(ret>OS_LOWEST_PRIO)
 02AA 82E0              ldi R24,2
 02AC 8417              cp R24,R20
 02AE D0F4              brsh L44
 02B0                   .dbline 241
 02B0           ;                 OSError(0);
 02B0 0027              clr R16
 02B2 00D0              rcall _OSError
 02B4                   .dbline 243
 02B4           ; #endif                
 02B4           ;           break;//for
 02B4 17C0              rjmp L44
 02B6           L50:
 02B6                   .dbline 246
 02B6           ;         }//end OS_STAT_RDY==ptcb->OSTCBStat
 02B6           ; #if OS_SEM_EN
 02B6           ;         else{
 02B6                   .dbline 247
 02B6           ;                 if(ptcb->OSTCBStat & OS_STAT_SEM)
 02B6 EA2D              mov R30,R10
 02B8 FB2D              mov R31,R11
 02BA 2480              ldd R2,z+4
 02BC 21FE              sbrs R2,1
 02BE 0EC0              rjmp L56
 02C0                   .dbline 248
 02C0           ;                 {
 02C0                   .dbline 250
 02C0           ; #if OS_STRICT
 02C0           ;                         if(i!=ptcb->OSTCBPrio)
 02C0 2580              ldd R2,z+5
 02C2 6215              cp R22,R2
 02C4 11F0              breq L58
 02C6                   .dbline 251
 02C6           ;                                 OSError(0);
 02C6 0027              clr R16
 02C8 00D0              rcall _OSError
 02CA           L58:
 02CA                   .dbline 253
 02CA           ; #endif  
 02CA           ;                         ret=ptcb->OSTCBPrio;     
 02CA EA2D              mov R30,R10
 02CC FB2D              mov R31,R11
 02CE 4581              ldd R20,z+5
 02D0                   .dbline 255
 02D0           ; #if OS_STRICT
 02D0           ;                         if(ret>OS_LOWEST_PRIO)
 02D0 82E0              ldi R24,2
 02D2 8417              cp R24,R20
 02D4 38F4              brsh L44
 02D6                   .dbline 256
 02D6           ;                                 OSError(0);
 02D6 0027              clr R16
 02D8 00D0              rcall _OSError
 02DA                   .dbline 258
 02DA           ; #endif                
 02DA           ;           break;//for
 02DA 04C0              rjmp L44
 02DC           L56:
 02DC                   .dbline 260
 02DC           ;                 }
 02DC           ;         }//end (ptcb->OSTCBStat & OS_STAT_SEM)
 02DC                   .dbline 262
 02DC           ; #endif//OS_SEM_EN
 02DC           ;         }//end (0==ptcb->OSTCBDly)
 02DC           L48:
 02DC                   .dbline 263
 02DC           ;       }
 02DC           L46:
 02DC                   .dbline 265
 02DC           L43:
 02DC                   .dbline 224
 02DC 6395              inc R22
 02DE           L45:
 02DE                   .dbline 224
 02DE 6330              cpi R22,3
 02E0 08F4              brsh X11
 02E2 BDCF              rjmp L42
 02E4           X11:
 02E4           L44:
 02E4                   .dbline 266
 02E4           ;     //OS_EXIT_CRITICAL();
 02E4           ;   }
 02E4           ;   return ret;
 02E4 042F              mov R16,R20
 02E6                   .dbline -2
 02E6           L41:
 02E6 00D0              rcall pop_gset3
 02E8                   .dbline 0 ; func end
 02E8 0895              ret
 02EA                   .dbsym r ret 20 c
 02EA                   .dbsym r ptcb 10 pX
 02EA                   .dbsym r i 22 c
 02EA                   .dbend
 02EA                   .dbfunc e OSTimeTick _OSTimeTick fV
 02EA           ;            ret -> <dead>
 02EA           ;           ptcb -> R16,R17
 02EA           ;              i -> R18
                        .even
 02EA           _OSTimeTick::
 02EA                   .dbline -1
 02EA                   .dbline 284
 02EA           ; }
 02EA           ; 
 02EA           ; /*
 02EA           ; *********************************************************************************************************
 02EA           ; *                                         PROCESS SYSTEM TICK
 02EA           ; *
 02EA           ; * Description: This function is used to signal to uC/OS-II the occurrence of a 'system tick' (also known
 02EA           ; *              as a 'clock tick').  This function should be called by the ticker ISR but, can also be
 02EA           ; *              called by a high priority task.
 02EA           ; *
 02EA           ; * Arguments  : none
 02EA           ; *
 02EA           ; * Returns    : none
 02EA           ; *********************************************************************************************************
 02EA           ; */
 02EA           ; 
 02EA           ; void OSTimeTick (void)
 02EA           ; {
 02EA                   .dbline 288
 02EA           ;     INT8U i,ret;
 02EA           ;     OS_TCB *ptcb;

⌨️ 快捷键说明

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