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

📄 os_time.lis

📁 把UCOSII移植到AVR MEGA8上的程序 应用程序为驱动1602显示器,虽说有些简单,但可测试UCOS的运行
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 00D2 9B01              movw R18,R22
 00D4 00D0              rcall empy32u
 00D6 1801              movw R2,R16
 00D8 2901              movw R4,R18
 00DA 6A2C              mov R6,R10
 00DC 7724              clr R7
 00DE 8824              clr R8
 00E0 9924              clr R9
 00E2 40E1              ldi R20,16
 00E4 5EE0              ldi R21,14
 00E6 60E0              ldi R22,0
 00E8 70E0              ldi R23,0
 00EA 9A92              st -y,R9
 00EC 8A92              st -y,R8
 00EE 7A92              st -y,R7
 00F0 6A92              st -y,R6
 00F2 8A01              movw R16,R20
 00F4 9B01              movw R18,R22
 00F6 00D0              rcall empy32u
 00F8 3801              movw R6,R16
 00FA 4901              movw R8,R18
 00FC 620C              add R6,R2
 00FE 731C              adc R7,R3
 0100 841C              adc R8,R4
 0102 951C              adc R9,R5
 0104 2C84              ldd R2,y+12
 0106 3324              clr R3
 0108 4424              clr R4
 010A 5524              clr R5
 010C 620C              add R6,R2
 010E 731C              adc R7,R3
 0110 841C              adc R8,R4
 0112 951C              adc R9,R5
 0114 42E3              ldi R20,50
 0116 50E0              ldi R21,0
 0118 60E0              ldi R22,0
 011A 70E0              ldi R23,0
 011C 9A92              st -y,R9
 011E 8A92              st -y,R8
 0120 7A92              st -y,R7
 0122 6A92              st -y,R6
 0124 8A01              movw R16,R20
 0126 9B01              movw R18,R22
 0128 00D0              rcall empy32u
 012A 1801              movw R2,R16
 012C 2901              movw R4,R18
 012E 4AE0              ldi R20,10
 0130 50E0              ldi R21,0
 0132 60E0              ldi R22,0
 0134 70E0              ldi R23,0
 0136 6E84              ldd R6,y+14
 0138 7F84              ldd R7,y+15
 013A 8824              clr R8
 013C 9924              clr R9
 013E 640E              add R6,R20
 0140 751E              adc R7,R21
 0142 861E              adc R8,R22
 0144 971E              adc R9,R23
 0146 42E3              ldi R20,50
 0148 50E0              ldi R21,0
 014A 60E0              ldi R22,0
 014C 70E0              ldi R23,0
 014E 9A92              st -y,R9
 0150 8A92              st -y,R8
 0152 7A92              st -y,R7
 0154 6A92              st -y,R6
 0156 8A01              movw R16,R20
 0158 9B01              movw R18,R22
 015A 00D0              rcall empy32u
 015C 48EE              ldi R20,232
 015E 53E0              ldi R21,3
 0160 60E0              ldi R22,0
 0162 70E0              ldi R23,0
 0164 7A93              st -y,R23
 0166 6A93              st -y,R22
 0168 5A93              st -y,R21
 016A 4A93              st -y,R20
 016C 00D0              rcall div32u
 016E 200E              add R2,R16
 0170 311E              adc R3,R17
 0172 421E              adc R4,R18
 0174 531E              adc R5,R19
 0176 FE01              movw R30,R28
 0178 2082              std z+0,R2
 017A 3182              std z+1,R3
 017C 4282              std z+2,R4
 017E 5382              std z+3,R5
 0180                   .dbline 99
 0180           ;               + OS_TICKS_PER_SEC * ((INT32U)milli + 500L / OS_TICKS_PER_SEC) / 1000L;
 0180           ;         loops = (INT16U)(ticks / 65536L);        /* Compute the integral number of 65536 tick delays   */
 0180 FE01              movw R30,R28
 0182 2080              ldd R2,z+0
 0184 3180              ldd R3,z+1
 0186 4280              ldd R4,z+2
 0188 5380              ldd R5,z+3
 018A 5201              movw R10,R4
 018C                   .dbline 100
 018C           ;         ticks = ticks % 65536L;                  /* Obtain  the fractional number of ticks             */
 018C 4FEF              ldi R20,255
 018E 5FEF              ldi R21,255
 0190 60E0              ldi R22,0
 0192 70E0              ldi R23,0
 0194 FE01              movw R30,R28
 0196 2080              ldd R2,z+0
 0198 3180              ldd R3,z+1
 019A 4280              ldd R4,z+2
 019C 5380              ldd R5,z+3
 019E 2422              and R2,R20
 01A0 3522              and R3,R21
 01A2 4622              and R4,R22
 01A4 5722              and R5,R23
 01A6 FE01              movw R30,R28
 01A8 2082              std z+0,R2
 01AA 3182              std z+1,R3
 01AC 4282              std z+2,R4
 01AE 5382              std z+3,R5
 01B0                   .dbline 101
 01B0           ;         OSTimeDly((INT16U)ticks);
 01B0 FE01              movw R30,R28
 01B2 0081              ldd R16,z+0
 01B4 1181              ldd R17,z+1
 01B6 24DF              rcall _OSTimeDly
 01B8 09C0              rjmp L21
 01BA           L20:
 01BA                   .dbline 102
 01BA                   .dbline 103
 01BA 00E0              ldi R16,32768
 01BC 10E8              ldi R17,128
 01BE 20DF              rcall _OSTimeDly
 01C0                   .dbline 104
 01C0 00E0              ldi R16,32768
 01C2 10E8              ldi R17,128
 01C4 1DDF              rcall _OSTimeDly
 01C6                   .dbline 105
 01C6 C501              movw R24,R10
 01C8 0197              sbiw R24,1
 01CA 5C01              movw R10,R24
 01CC                   .dbline 106
 01CC           L21:
 01CC                   .dbline 102
 01CC           ;         while (loops > 0) {
 01CC AA20              tst R10
 01CE A9F7              brne L20
 01D0 BB20              tst R11
 01D2 99F7              brne L20
 01D4           X3:
 01D4                   .dbline 107
 01D4           ;             OSTimeDly(32768);
 01D4           ;             OSTimeDly(32768);
 01D4           ;             loops--;
 01D4           ;         }
 01D4           ;         return (OS_NO_ERR);
 01D4 0027              clr R16
 01D6 01C0              rjmp L8
 01D8           L9:
 01D8                   .dbline 109
 01D8           ;     }
 01D8           ;     return (OS_TIME_ZERO_DLY);
 01D8 04E5              ldi R16,84
 01DA                   .dbline -2
 01DA           L8:
 01DA 2496              adiw R28,4
 01DC 00D0              rcall pop_gset4
 01DE                   .dbline 0 ; func end
 01DE 0895              ret
 01E0                   .dbsym l ticks 0 l
 01E0                   .dbsym r loops 10 i
 01E0                   .dbsym l milli 14 i
 01E0                   .dbsym l seconds 12 c
 01E0                   .dbsym r minutes 12 c
 01E0                   .dbsym r hours 10 c
 01E0                   .dbend
 01E0                   .dbfunc e OSTimeDlyResume _OSTimeDlyResume fc
 01E0                   .dbstruct 0 9 .1
 01E0                   .dbfield 0 OSEventType c
 01E0                   .dbfield 1 OSEventGrp c
 01E0                   .dbfield 2 OSEventCnt i
 01E0                   .dbfield 4 OSEventPtr pV
 01E0                   .dbfield 6 OSEventTbl A[3:3]c
 01E0                   .dbend
 01E0                   .dbstruct 0 16 os_tcb
 01E0                   .dbfield 0 OSTCBStkPtr pc
 01E0                   .dbfield 2 OSTCBNext pS[os_tcb]
 01E0                   .dbfield 4 OSTCBPrev pS[os_tcb]
 01E0                   .dbfield 6 OSTCBEventPtr pS[.1]
 01E0                   .dbfield 8 OSTCBDly i
 01E0                   .dbfield 10 OSTCBStat c
 01E0                   .dbfield 11 OSTCBPrio c
 01E0                   .dbfield 12 OSTCBX c
 01E0                   .dbfield 13 OSTCBY c
 01E0                   .dbfield 14 OSTCBBitX c
 01E0                   .dbfield 15 OSTCBBitY c
 01E0                   .dbend
 01E0           ;         cpu_sr -> R20
 01E0           ;           ptcb -> R22,R23
 01E0           ;           prio -> R22
                        .even
 01E0           _OSTimeDlyResume::
 01E0 00D0              rcall push_gset2
 01E2 602F              mov R22,R16
 01E4                   .dbline -1
 01E4                   .dbline 139
 01E4           ; }
 01E4           ; #endif
 01E4           ; /*$PAGE*/
 01E4           ; /*
 01E4           ; *********************************************************************************************************
 01E4           ; *                                         RESUME A DELAYED TASK
 01E4           ; *
 01E4           ; * Description: This function is used resume a task that has been delayed through a call to either
 01E4           ; *              OSTimeDly() or OSTimeDlyHMSM().  Note that you MUST NOT call this function to resume a
 01E4           ; *              task that is waiting for an event with timeout.  This situation would make the task look
 01E4           ; *              like a timeout occurred (unless you desire this effect).  Also, you cannot resume a task
 01E4           ; *              that has called OSTimeDlyHMSM() with a combined time that exceeds 65535 clock ticks.  In
 01E4           ; *              other words, if the clock tick runs at 100 Hz then, you will not be able to resume a
 01E4           ; *              delayed task that called OSTimeDlyHMSM(0, 10, 55, 350) or higher.
 01E4           ; *
 01E4           ; *                  (10 Minutes * 60 + 55 Seconds + 0.35) * 100 ticks/second.
 01E4           ; *
 01E4           ; * Arguments  : prio      specifies the priority of the task to resume
 01E4           ; *
 01E4           ; * Returns    : OS_NO_ERR                 Task has been resumed
 01E4           ; *              OS_PRIO_INVALID           if the priority you specify is higher that the maximum allowed
 01E4           ; *                                        (i.e. >= OS_LOWEST_PRIO)
 01E4           ; *              OS_TIME_NOT_DLY           Task is not waiting for time to expire
 01E4           ; *              OS_TASK_NOT_EXIST         The desired task has not been created
 01E4           ; *********************************************************************************************************
 01E4           ; */
 01E4           ; 
 01E4           ; #if OS_TIME_DLY_RESUME_EN > 0
 01E4           ; INT8U  OSTimeDlyResume (INT8U prio)
 01E4           ; {
 01E4                   .dbline 146
 01E4           ; #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
 01E4           ;     OS_CPU_SR  cpu_sr;
 01E4           ; #endif    
 01E4           ;     OS_TCB    *ptcb;
 01E4           ; 
 01E4           ; 
 01E4           ;     if (prio >= OS_LOWEST_PRIO) {
 01E4 6431              cpi R22,20
 01E6 10F0              brlo L24
 01E8                   .dbline 146
 01E8                   .dbline 147
 01E8           ;         return (OS_PRIO_INVALID);
 01E8 0AE2              ldi R16,42
 01EA 43C0              rjmp L23
 01EC           L24:
 01EC                   .dbline 149
 01EC           ;     }
 01EC           ;     OS_ENTER_CRITICAL();
 01EC 00D0              rcall _OS_CPU_SR_Save

⌨️ 快捷键说明

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