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

📄 os_time.lis

📁 把UCOSII移植到AVR MEGA8上的程序 应用程序为驱动1602显示器,虽说有些简单,但可测试UCOS的运行
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01EE 402F              mov R20,R16
 01F0                   .dbline 150
 01F0           ;     ptcb = (OS_TCB *)OSTCBPrioTbl[prio];                   /* Make sure that task exist                */
 01F0 82E0              ldi R24,2
 01F2 869F              mul R24,R22
 01F4 F001              movw R30,R0
 01F6 80E0              ldi R24,<_OSTCBPrioTbl
 01F8 90E0              ldi R25,>_OSTCBPrioTbl
 01FA E80F              add R30,R24
 01FC F91F              adc R31,R25
 01FE 6081              ldd R22,z+0
 0200 7181              ldd R23,z+1
 0202                   .dbline 151
 0202           ;     if (ptcb != (OS_TCB *)0) {
 0202 6030              cpi R22,0
 0204 6707              cpc R22,R23
 0206 09F4              brne X7
 0208 31C0              rjmp L26
 020A           X7:
 020A           X5:
 020A                   .dbline 151
 020A                   .dbline 152
 020A           ;         if (ptcb->OSTCBDly != 0) {                         /* See if task is delayed                   */
 020A FB01              movw R30,R22
 020C 2084              ldd R2,z+8
 020E 3184              ldd R3,z+9
 0210 2220              tst R2
 0212 19F4              brne X6
 0214 3320              tst R3
 0216 09F4              brne X8
 0218 25C0              rjmp L28
 021A           X8:
 021A           X6:
 021A                   .dbline 152
 021A                   .dbline 153
 021A           ;             ptcb->OSTCBDly  = 0;                           /* Clear the time delay                     */
 021A 2224              clr R2
 021C 3324              clr R3
 021E FB01              movw R30,R22
 0220 3186              std z+9,R3
 0222 2086              std z+8,R2
 0224                   .dbline 154
 0224           ;             if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == 0x00) {  /* See if task is ready to run         */
 0224 FB01              movw R30,R22
 0226 2284              ldd R2,z+10
 0228 23FC              sbrc R2,3
 022A 18C0              rjmp L30
 022C                   .dbline 154
 022C                   .dbline 155
 022C           ;                 OSRdyGrp               |= ptcb->OSTCBBitY;      /* Make task ready to run              */
 022C FB01              movw R30,R22
 022E 2784              ldd R2,z+15
 0230 30900000          lds R3,_OSRdyGrp
 0234 3228              or R3,R2
 0236 30920000          sts _OSRdyGrp,R3
 023A                   .dbline 156
 023A           ;                 OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
 023A 80E0              ldi R24,<_OSRdyTbl
 023C 90E0              ldi R25,>_OSRdyTbl
 023E FB01              movw R30,R22
 0240 2584              ldd R2,z+13
 0242 3324              clr R3
 0244 280E              add R2,R24
 0246 391E              adc R3,R25
 0248 FB01              movw R30,R22
 024A 4684              ldd R4,z+14
 024C F101              movw R30,R2
 024E 5080              ldd R5,z+0
 0250 5428              or R5,R4
 0252 5082              std z+0,R5
 0254                   .dbline 157
 0254           ;                 OS_EXIT_CRITICAL();
 0254 042F              mov R16,R20
 0256 00D0              rcall _OS_CPU_SR_Restore
 0258                   .dbline 158
 0258           ;                 OS_Sched();                                /* See if this is new highest priority      */
 0258 00D0              rcall _OS_Sched
 025A                   .dbline 159
 025A 02C0              rjmp L31
 025C           L30:
 025C                   .dbline 159
 025C           ;             } else {
 025C                   .dbline 160
 025C           ;                 OS_EXIT_CRITICAL();                        /* Task may be suspended                    */
 025C 042F              mov R16,R20
 025E 00D0              rcall _OS_CPU_SR_Restore
 0260                   .dbline 161
 0260           ;             }
 0260           L31:
 0260                   .dbline 162
 0260           ;             return (OS_NO_ERR);
 0260 0027              clr R16
 0262 07C0              rjmp L23
 0264           L28:
 0264                   .dbline 163
 0264           ;         } else {
 0264                   .dbline 164
 0264           ;             OS_EXIT_CRITICAL();
 0264 042F              mov R16,R20
 0266 00D0              rcall _OS_CPU_SR_Restore
 0268                   .dbline 165
 0268           ;             return (OS_TIME_NOT_DLY);                      /* Indicate that task was not delayed       */
 0268 00E5              ldi R16,80
 026A 03C0              rjmp L23
 026C           L26:
 026C                   .dbline 168
 026C           ;         }
 026C           ;     }
 026C           ;     OS_EXIT_CRITICAL();
 026C 042F              mov R16,R20
 026E 00D0              rcall _OS_CPU_SR_Restore
 0270                   .dbline 169
 0270           ;     return (OS_TASK_NOT_EXIST);                            /* The task does not exist                  */
 0270 0BE0              ldi R16,11
 0272                   .dbline -2
 0272           L23:
 0272 00D0              rcall pop_gset2
 0274                   .dbline 0 ; func end
 0274 0895              ret
 0276                   .dbsym r cpu_sr 20 c
 0276                   .dbsym r ptcb 22 pS[os_tcb]
 0276                   .dbsym r prio 22 c
 0276                   .dbend
 0276                   .dbfunc e OSTimeGet _OSTimeGet fl
 0276           ;          ticks -> y+0
 0276           ;         cpu_sr -> R20
                        .even
 0276           _OSTimeGet::
 0276 00D0              rcall push_gset1
 0278 2497              sbiw R28,4
 027A                   .dbline -1
 027A                   .dbline 188
 027A           ; }
 027A           ; #endif    
 027A           ; /*$PAGE*/
 027A           ; /*
 027A           ; *********************************************************************************************************
 027A           ; *                                         GET CURRENT SYSTEM TIME
 027A           ; *
 027A           ; * Description: This function is used by your application to obtain the current value of the 32-bit
 027A           ; *              counter which keeps track of the number of clock ticks.
 027A           ; *
 027A           ; * Arguments  : none
 027A           ; *
 027A           ; * Returns    : The current value of OSTime
 027A           ; *********************************************************************************************************
 027A           ; */
 027A           ; 
 027A           ; #if OS_TIME_GET_SET_EN > 0
 027A           ; INT32U  OSTimeGet (void)
 027A           ; {
 027A                   .dbline 195
 027A           ; #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
 027A           ;     OS_CPU_SR  cpu_sr;
 027A           ; #endif    
 027A           ;     INT32U     ticks;
 027A           ; 
 027A           ; 
 027A           ;     OS_ENTER_CRITICAL();
 027A 00D0              rcall _OS_CPU_SR_Save
 027C 402F              mov R20,R16
 027E                   .dbline 196
 027E           ;     ticks = OSTime;
 027E 40900200          lds R4,_OSTime+2
 0282 50900300          lds R5,_OSTime+2+1
 0286 20900000          lds R2,_OSTime
 028A 30900100          lds R3,_OSTime+1
 028E FE01              movw R30,R28
 0290 2082              std z+0,R2
 0292 3182              std z+1,R3
 0294 4282              std z+2,R4
 0296 5382              std z+3,R5
 0298                   .dbline 197
 0298           ;     OS_EXIT_CRITICAL();
 0298 00D0              rcall _OS_CPU_SR_Restore
 029A                   .dbline 198
 029A           ;     return (ticks);
 029A FE01              movw R30,R28
 029C 0081              ldd R16,z+0
 029E 1181              ldd R17,z+1
 02A0 2281              ldd R18,z+2
 02A2 3381              ldd R19,z+3
 02A4                   .dbline -2
 02A4           L32:
 02A4 2496              adiw R28,4
 02A6 00D0              rcall pop_gset1
 02A8                   .dbline 0 ; func end
 02A8 0895              ret
 02AA                   .dbsym l ticks 0 l
 02AA                   .dbsym r cpu_sr 20 c
 02AA                   .dbend
 02AA                   .dbfunc e OSTimeSet _OSTimeSet fV
 02AA           ;         cpu_sr -> R20
 02AA           ;          ticks -> y+2
                        .even
 02AA           _OSTimeSet::
 02AA 00D0              rcall push_arg4
 02AC 00D0              rcall push_gset1
 02AE                   .dbline -1
 02AE                   .dbline 216
 02AE           ; }
 02AE           ; #endif    
 02AE           ; 
 02AE           ; /*
 02AE           ; *********************************************************************************************************
 02AE           ; *                                            SET SYSTEM CLOCK
 02AE           ; *
 02AE           ; * Description: This function sets the 32-bit counter which keeps track of the number of clock ticks.
 02AE           ; *
 02AE           ; * Arguments  : ticks      specifies the new value that OSTime needs to take.
 02AE           ; *
 02AE           ; * Returns    : none
 02AE           ; *********************************************************************************************************
 02AE           ; */
 02AE           ; 
 02AE           ; #if OS_TIME_GET_SET_EN > 0
 02AE           ; void  OSTimeSet (INT32U ticks)
 02AE           ; {
 02AE                   .dbline 222
 02AE           ; #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
 02AE           ;     OS_CPU_SR  cpu_sr;
 02AE           ; #endif    
 02AE           ; 
 02AE           ; 
 02AE           ;     OS_ENTER_CRITICAL();
 02AE 00D0              rcall _OS_CPU_SR_Save
 02B0 402F              mov R20,R16
 02B2                   .dbline 223
 02B2           ;     OSTime = ticks;
 02B2 FE01              movw R30,R28
 02B4 2280              ldd R2,z+2
 02B6 3380              ldd R3,z+3
 02B8 4480              ldd R4,z+4
 02BA 5580              ldd R5,z+5
 02BC 30920100          sts _OSTime+1,R3
 02C0 20920000          sts _OSTime,R2
 02C4 50920300          sts _OSTime+2+1,R5
 02C8 40920200          sts _OSTime+2,R4
 02CC                   .dbline 224
 02CC           ;     OS_EXIT_CRITICAL();
 02CC 00D0              rcall _OS_CPU_SR_Restore
 02CE                   .dbline -2
 02CE           L33:
 02CE 00D0              rcall pop_gset1
 02D0 2496              adiw R28,4
 02D2                   .dbline 0 ; func end
 02D2 0895              ret
 02D4                   .dbsym r cpu_sr 20 c
 02D4                   .dbsym l ticks 2 l
 02D4                   .dbend

⌨️ 快捷键说明

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