📄 os_tmr.txt
字号:
000244 ebfffffe BL OSTmr_Free
000248 e5950000 LDR r0,[r5,#0] ; OSTmrSem
00024c ebfffffe BL OSSemPost
;;;245 OSTmr_Unlock();
;;;246 *perr = OS_ERR_NONE;
;;;247 return (OS_TRUE);
000250 e3a00001 MOV r0,#1
000254 e5c47000 STRB r7,[r4,#0] ;246
|L1.600|
000258 e8bd41f0 POP {r4-r8,lr}
;;;248
;;;249 case OS_TMR_STATE_UNUSED: /* Already deleted */
;;;250 OSTmr_Unlock();
;;;251 *perr = OS_ERR_TMR_INACTIVE;
;;;252 return (OS_FALSE);
;;;253
;;;254 default:
;;;255 OSTmr_Unlock();
;;;256 *perr = OS_ERR_TMR_INVALID_STATE;
;;;257 return (OS_FALSE);
;;;258 }
;;;259 }
00025c e12fff1e BX lr
|L1.608|
000260 e5950000 LDR r0,[r5,#0] ; OSTmrSem
000264 ebfffffe BL OSSemPost
000268 e3a00087 MOV r0,#0x87 ;251
|L1.620|
00026c e5c40000 STRB r0,[r4,#0] ;256
000270 e3a00000 MOV r0,#0 ;257
000274 eafffff7 B |L1.600|
|L1.632|
000278 e5950000 LDR r0,[r5,#0] ;257 ; OSTmrSem
00027c ebfffffe BL OSSemPost
000280 e3a0008d MOV r0,#0x8d ;256
000284 eafffff8 B |L1.620|
;;;260 #endif
ENDP
OSTmrNameGet PROC
;;;290 INT8U *perr)
;;;291 {
000288 e92d41f0 PUSH {r4-r8,lr}
00028c e1a05000 MOV r5,r0
;;;292 INT8U len;
;;;293
;;;294
;;;295 #if OS_ARG_CHK_EN > 0
;;;296 if (perr == (INT8U *)0) {
;;;297 return (0);
;;;298 }
;;;299 if (pdest == (INT8U *)0) {
;;;300 *perr = OS_ERR_TMR_INVALID_DEST;
;;;301 return (0);
;;;302 }
;;;303 if (ptmr == (OS_TMR *)0) {
;;;304 *perr = OS_ERR_TMR_INVALID;
;;;305 return (0);
;;;306 }
;;;307 #endif
;;;308 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
000290 e5d00000 LDRB r0,[r0,#0]
000294 e1a07001 MOV r7,r1 ;291
000298 e1a04002 MOV r4,r2 ;291
00029c e3500064 CMP r0,#0x64
;;;309 *perr = OS_ERR_TMR_INVALID_TYPE;
0002a0 13a00089 MOVNE r0,#0x89
;;;310 return (0);
0002a4 1a00001b BNE |L1.792|
;;;311 }
;;;312 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
0002a8 e59f061c LDR r0,|L1.2252|
0002ac e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
0002b0 e3500000 CMP r0,#0
;;;313 *perr = OS_ERR_NAME_GET_ISR;
0002b4 13a00011 MOVNE r0,#0x11
;;;314 return (0);
0002b8 1a000016 BNE |L1.792|
;;;315 }
;;;316 OSTmr_Lock();
0002bc ebfffffe BL OSTmr_Lock
;;;317 switch (ptmr->OSTmrState) {
0002c0 e5d50031 LDRB r0,[r5,#0x31]
0002c4 e59f6610 LDR r6,|L1.2268|
0002c8 e3500000 CMP r0,#0
0002cc 0a00000e BEQ |L1.780|
0002d0 e3500001 CMP r0,#1
0002d4 13500002 CMPNE r0,#2
0002d8 13500003 CMPNE r0,#3
0002dc 1a000010 BNE |L1.804|
;;;318 case OS_TMR_STATE_RUNNING:
;;;319 case OS_TMR_STATE_STOPPED:
;;;320 case OS_TMR_STATE_COMPLETED:
;;;321 len = OS_StrCopy(pdest, ptmr->OSTmrName);
0002e0 e2851020 ADD r1,r5,#0x20
0002e4 e1a00007 MOV r0,r7
0002e8 ebfffffe BL OS_StrCopy
0002ec e1a05000 MOV r5,r0
0002f0 e5960000 LDR r0,[r6,#0] ; OSTmrSem
0002f4 ebfffffe BL OSSemPost
;;;322 OSTmr_Unlock();
;;;323 *perr = OS_ERR_NONE;
0002f8 e3a00000 MOV r0,#0
0002fc e5c40000 STRB r0,[r4,#0]
;;;324 return (len);
000300 e1a00005 MOV r0,r5
|L1.772|
000304 e8bd41f0 POP {r4-r8,lr}
;;;325
;;;326 case OS_TMR_STATE_UNUSED: /* Timer is not allocated */
;;;327 OSTmr_Unlock();
;;;328 *perr = OS_ERR_TMR_INACTIVE;
;;;329 return (0);
;;;330
;;;331 default:
;;;332 OSTmr_Unlock();
;;;333 *perr = OS_ERR_TMR_INVALID_STATE;
;;;334 return (0);
;;;335 }
;;;336 }
000308 e12fff1e BX lr
|L1.780|
00030c e5960000 LDR r0,[r6,#0] ; OSTmrSem
000310 ebfffffe BL OSSemPost
000314 e3a00087 MOV r0,#0x87 ;328
|L1.792|
000318 e5c40000 STRB r0,[r4,#0] ;333
00031c e3a00000 MOV r0,#0 ;334
000320 eafffff7 B |L1.772|
|L1.804|
000324 e5960000 LDR r0,[r6,#0] ;334 ; OSTmrSem
000328 ebfffffe BL OSSemPost
00032c e3a0008d MOV r0,#0x8d ;333
000330 eafffff8 B |L1.792|
;;;337 #endif
ENDP
OSTmrRemainGet PROC
;;;364 INT8U *perr)
;;;365 {
000334 e92d41f0 PUSH {r4-r8,lr}
000338 e1a05000 MOV r5,r0
;;;366 INT32U remain;
;;;367
;;;368
;;;369 #if OS_ARG_CHK_EN > 0
;;;370 if (perr == (INT8U *)0) {
;;;371 return (0);
;;;372 }
;;;373 if (ptmr == (OS_TMR *)0) {
;;;374 *perr = OS_ERR_TMR_INVALID;
;;;375 return (0);
;;;376 }
;;;377 #endif
;;;378 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
00033c e5d00000 LDRB r0,[r0,#0]
000340 e1a04001 MOV r4,r1 ;365
000344 e3500064 CMP r0,#0x64
;;;379 *perr = OS_ERR_TMR_INVALID_TYPE;
000348 13a00089 MOVNE r0,#0x89
;;;380 return (0);
00034c 1a000004 BNE |L1.868|
;;;381 }
;;;382 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
000350 e59f0574 LDR r0,|L1.2252|
000354 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000358 e3500000 CMP r0,#0
00035c 0a000002 BEQ |L1.876|
;;;383 *perr = OS_ERR_TMR_ISR;
000360 e3a0008b MOV r0,#0x8b
|L1.868|
000364 e5c40000 STRB r0,[r4,#0] ;379
000368 ea000023 B |L1.1020|
|L1.876|
;;;384 return (0);
;;;385 }
;;;386 OSTmr_Lock();
00036c ebfffffe BL OSTmr_Lock
;;;387 switch (ptmr->OSTmrState) {
000370 e5d50031 LDRB r0,[r5,#0x31]
000374 e59f1560 LDR r1,|L1.2268|
000378 e3500000 CMP r0,#0
00037c 0a000020 BEQ |L1.1028|
000380 e3500001 CMP r0,#1
000384 e3a07000 MOV r7,#0
000388 0a00000d BEQ |L1.964|
00038c e3500002 CMP r0,#2
000390 0a000016 BEQ |L1.1008|
000394 e3500003 CMP r0,#3
000398 1a00001d BNE |L1.1044|
;;;388 case OS_TMR_STATE_RUNNING:
;;;389 remain = ptmr->OSTmrMatch - OSTmrTime; /* Determine how much time is left to timeout */
00039c e59f2540 LDR r2,|L1.2276|
0003a0 e5950014 LDR r0,[r5,#0x14]
0003a4 e5922000 LDR r2,[r2,#0] ; OSTmrTime
0003a8 e0405002 SUB r5,r0,r2
0003ac e5910000 LDR r0,[r1,#0] ; OSTmrSem
0003b0 ebfffffe BL OSSemPost
;;;390 OSTmr_Unlock();
;;;391 *perr = OS_ERR_NONE;
;;;392 return (remain);
0003b4 e1a00005 MOV r0,r5
0003b8 e5c47000 STRB r7,[r4,#0] ;391
|L1.956|
0003bc e8bd41f0 POP {r4-r8,lr}
;;;393
;;;394 case OS_TMR_STATE_STOPPED: /* It's assumed that the timer has not started yet */
;;;395 switch (ptmr->OSTmrOpt) {
;;;396 case OS_TMR_OPT_PERIODIC:
;;;397 if (ptmr->OSTmrDly == 0) {
;;;398 remain = ptmr->OSTmrPeriod;
;;;399 } else {
;;;400 remain = ptmr->OSTmrDly;
;;;401 }
;;;402 OSTmr_Unlock();
;;;403 *perr = OS_ERR_NONE;
;;;404 break;
;;;405
;;;406 case OS_TMR_OPT_ONE_SHOT:
;;;407 default:
;;;408 remain = ptmr->OSTmrDly;
;;;409 OSTmr_Unlock();
;;;410 *perr = OS_ERR_NONE;
;;;411 break;
;;;412 }
;;;413 return (remain);
;;;414
;;;415 case OS_TMR_STATE_COMPLETED: /* Only ONE-SHOT that timed out can be in this state */
;;;416 OSTmr_Unlock();
;;;417 *perr = OS_ERR_NONE;
;;;418 return (0);
;;;419
;;;420 case OS_TMR_STATE_UNUSED:
;;;421 OSTmr_Unlock();
;;;422 *perr = OS_ERR_TMR_INACTIVE;
;;;423 return (0);
;;;424
;;;425 default:
;;;426 OSTmr_Unlock();
;;;427 *perr = OS_ERR_TMR_INVALID_STATE;
;;;428 return (0);
;;;429 }
;;;430 }
0003c0 e12fff1e BX lr
|L1.964|
0003c4 e5d50030 LDRB r0,[r5,#0x30] ;395
0003c8 e5956018 LDR r6,[r5,#0x18] ;408
0003cc e3500002 CMP r0,#2 ;395
0003d0 1a000001 BNE |L1.988|
0003d4 e3560000 CMP r6,#0 ;397
0003d8 0595601c LDREQ r6,[r5,#0x1c] ;398
|L1.988|
0003dc e5910000 LDR r0,[r1,#0] ;398 ; OSTmrSem
0003e0 ebfffffe BL OSSemPost
0003e4 e1a00006 MOV r0,r6 ;413
0003e8 e5c47000 STRB r7,[r4,#0] ;403
0003ec eafffff2 B |L1.956|
|L1.1008|
0003f0 e5910000 LDR r0,[r1,#0] ;413 ; OSTmrSem
0003f4 ebfffffe BL OSSemPost
0003f8 e5c47000 STRB r7,[r4,#0] ;417
|L1.1020|
0003fc e3a00000 MOV r0,#0 ;428
000400 eaffffed B |L1.956|
|L1.1028|
000404 e5910000 LDR r0,[r1,#0] ;428 ; OSTmrSem
000408 ebfffffe BL OSSemPost
00040c e3a00087 MOV r0,#0x87 ;422
000410 eaffffd3 B |L1.868|
|L1.1044|
000414 e5910000 LDR r0,[r1,#0] ;423 ; OSTmrSem
000418 ebfffffe BL OSSemPost
00041c e3a0008d MOV r0,#0x8d ;427
000420 eaffffcf B |L1.868|
;;;431 #endif
ENDP
OSTmrStateGet PROC
;;;461 INT8U *perr)
;;;462 {
000424 e92d4070 PUSH {r4-r6,lr}
000428 e1a04000 MOV r4,r0
;;;463 INT8U state;
;;;464
;;;465
;;;466 #if OS_ARG_CHK_EN > 0
;;;467 if (perr == (INT8U *)0) {
;;;468 return (0);
;;;469 }
;;;470 if (ptmr == (OS_TMR *)0) {
;;;471 *perr = OS_ERR_TMR_INVALID;
;;;472 return (0);
;;;473 }
;;;474 #endif
;;;475 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
00042c e5d00000 LDRB r0,[r0,#0]
000430 e1a05001 MOV r5,r1 ;462
000434 e3500064 CMP r0,#0x64
;;;476 *perr = OS_ERR_TMR_INVALID_TYPE;
000438 13a00089 MOVNE r0,#0x89
;;;477 return (0);
00043c 1a000004 BNE |L1.1108|
;;;478 }
;;;479 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
000440 e59f0484 LDR r0,|L1.2252|
000444 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000448 e3500000 CMP r0,#0
00044c 0a000004 BEQ |L1.1124|
;;;480 *perr = OS_ERR_TMR_ISR;
000450 e3a0008b MOV r0,#0x8b
|L1.1108|
000454 e5c50000 STRB r0,[r5,#0]
;;;481 return (0);
000458 e3a00000 MOV r0,#0
|L1.1116|
00045c e8bd4070 POP {r4-r6,lr}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -