📄 os_time.lis
字号:
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 + -