📄 os_tmr.txt
字号:
;;;790 OSTmrFree++;
000260 e59f1b0c LDR r1,|L1.3444|
000264 e1d110b0 LDRH r1,[r1,#0] ; OSTmrFree
000268 e2811001 ADD r1,r1,#1
00026c e3c11801 BIC r1,r1,#0x10000
000270 e59f2afc LDR r2,|L1.3444|
000274 e1c210b0 STRH r1,[r2,#0] ; OSTmrFree
;;;791 }
000278 e12fff1e BX lr
ENDP
OSTmr_Unlink PROC
;;;1004 static void OSTmr_Unlink (OS_TMR *ptmr)
;;;1005 {
00027c e52de004 PUSH {lr}
;;;1006 OS_TMR *ptmr1;
;;;1007 OS_TMR *ptmr2;
;;;1008 OS_TMR_WHEEL *pspoke;
;;;1009 INT16U spoke;
;;;1010
;;;1011
;;;1012 spoke = ptmr->OSTmrMatch % OS_TMR_CFG_WHEEL_SIZE;
000280 e590e014 LDR lr,[r0,#0x14]
000284 e20ec007 AND r12,lr,#7
;;;1013 pspoke = &OSTmrWheelTbl[spoke];
000288 e59feaec LDR lr,|L1.3452|
00028c e08e318c ADD r3,lr,r12,LSL #3
;;;1014
;;;1015 if (pspoke->OSTmrFirst == ptmr) { /* See if timer to remove is at the beginning of list */
000290 e593e000 LDR lr,[r3,#0]
000294 e15e0000 CMP lr,r0
000298 1a000006 BNE |L1.696|
;;;1016 ptmr1 = (OS_TMR *)ptmr->OSTmrNext;
00029c e590100c LDR r1,[r0,#0xc]
;;;1017 pspoke->OSTmrFirst = (void *)ptmr1;
0002a0 e5831000 STR r1,[r3,#0]
;;;1018 if (ptmr1 != (OS_TMR *)0) {
0002a4 e3510000 CMP r1,#0
0002a8 0a000008 BEQ |L1.720|
;;;1019 ptmr1->OSTmrPrev = (void *)0;
0002ac e3a0e000 MOV lr,#0
0002b0 e581e010 STR lr,[r1,#0x10]
0002b4 ea000005 B |L1.720|
|L1.696|
;;;1020 }
;;;1021 } else {
;;;1022 ptmr1 = (OS_TMR *)ptmr->OSTmrPrev; /* Remove timer from somewhere in the list */
0002b8 e5901010 LDR r1,[r0,#0x10]
;;;1023 ptmr2 = (OS_TMR *)ptmr->OSTmrNext;
0002bc e590200c LDR r2,[r0,#0xc]
;;;1024 ptmr1->OSTmrNext = ptmr2;
0002c0 e581200c STR r2,[r1,#0xc]
;;;1025 if (ptmr2 != (OS_TMR *)0) {
0002c4 e3520000 CMP r2,#0
0002c8 0a000000 BEQ |L1.720|
;;;1026 ptmr2->OSTmrPrev = (void *)ptmr1;
0002cc e5821010 STR r1,[r2,#0x10]
|L1.720|
;;;1027 }
;;;1028 }
;;;1029 ptmr->OSTmrState = OS_TMR_STATE_STOPPED;
0002d0 e3a0e001 MOV lr,#1
0002d4 e5c0e031 STRB lr,[r0,#0x31]
;;;1030 ptmr->OSTmrNext = (void *)0;
0002d8 e3a0e000 MOV lr,#0
0002dc e580e00c STR lr,[r0,#0xc]
;;;1031 ptmr->OSTmrPrev = (void *)0;
0002e0 e580e010 STR lr,[r0,#0x10]
;;;1032 pspoke->OSTmrEntries--;
0002e4 e1d3e0b4 LDRH lr,[r3,#4]
0002e8 e24ee001 SUB lr,lr,#1
0002ec e1c3e0b4 STRH lr,[r3,#4]
;;;1033 }
0002f0 e49de004 POP {lr}
0002f4 e12fff1e BX lr
ENDP
OSTmrDel PROC
;;;214 INT8U *perr)
;;;215 {
0002f8 e92d4070 PUSH {r4-r6,lr}
0002fc e1a05000 MOV r5,r0
000300 e1a04001 MOV r4,r1
;;;216 #if OS_ARG_CHK_EN > 0
;;;217 if (perr == (INT8U *)0) { /* Validate arguments */
000304 e3540000 CMP r4,#0
000308 1a000002 BNE |L1.792|
;;;218 return (OS_FALSE);
00030c e3a00000 MOV r0,#0
|L1.784|
000310 e8bd4070 POP {r4-r6,lr}
;;;219 }
;;;220 if (ptmr == (OS_TMR *)0) {
;;;221 *perr = OS_ERR_TMR_INVALID;
;;;222 return (OS_FALSE);
;;;223 }
;;;224 #endif
;;;225 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
;;;226 *perr = OS_ERR_TMR_INVALID_TYPE;
;;;227 return (OS_FALSE);
;;;228 }
;;;229 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
;;;230 *perr = OS_ERR_TMR_ISR;
;;;231 return (OS_FALSE);
;;;232 }
;;;233 OSTmr_Lock();
;;;234 switch (ptmr->OSTmrState) {
;;;235 case OS_TMR_STATE_RUNNING:
;;;236 OSTmr_Unlink(ptmr); /* Remove from current wheel spoke */
;;;237 OSTmr_Free(ptmr); /* Return timer to free list of timers */
;;;238 OSTmr_Unlock();
;;;239 *perr = OS_ERR_NONE;
;;;240 return (OS_TRUE);
;;;241
;;;242 case OS_TMR_STATE_STOPPED: /* Timer has not started or ... */
;;;243 case OS_TMR_STATE_COMPLETED: /* ... timer has completed the ONE-SHOT time */
;;;244 OSTmr_Free(ptmr); /* Return timer to free list of timers */
;;;245 OSTmr_Unlock();
;;;246 *perr = OS_ERR_NONE;
;;;247 return (OS_TRUE);
;;;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 }
000314 e12fff1e BX lr
|L1.792|
000318 e3550000 CMP r5,#0
00031c 1a000003 BNE |L1.816|
000320 e3a0008a MOV r0,#0x8a
000324 e5c40000 STRB r0,[r4,#0]
000328 e3a00000 MOV r0,#0
00032c eafffff7 B |L1.784|
|L1.816|
000330 e5d50000 LDRB r0,[r5,#0]
000334 e3500064 CMP r0,#0x64
000338 0a000003 BEQ |L1.844|
00033c e3a00089 MOV r0,#0x89
000340 e5c40000 STRB r0,[r4,#0]
000344 e3a00000 MOV r0,#0
000348 eafffff0 B |L1.784|
|L1.844|
00034c e59f0a24 LDR r0,|L1.3448|
000350 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000354 e3500000 CMP r0,#0
000358 da000003 BLE |L1.876|
00035c e3a0008b MOV r0,#0x8b
000360 e5c40000 STRB r0,[r4,#0]
000364 e3a00000 MOV r0,#0
000368 eaffffe8 B |L1.784|
|L1.876|
00036c ebfffffe BL OSTmr_Lock
000370 e5d50031 LDRB r0,[r5,#0x31]
000374 e3500000 CMP r0,#0
000378 0a000018 BEQ |L1.992|
00037c e3500001 CMP r0,#1
000380 0a00000d BEQ |L1.956|
000384 e3500002 CMP r0,#2
000388 0a00000d BEQ |L1.964|
00038c e3500003 CMP r0,#3
000390 1a000018 BNE |L1.1016|
000394 e1a00000 MOV r0,r0
000398 e1a00005 MOV r0,r5
00039c ebfffffe BL OSTmr_Unlink
0003a0 e1a00005 MOV r0,r5
0003a4 ebfffffe BL OSTmr_Free
0003a8 ebfffffe BL OSTmr_Unlock
0003ac e3a00000 MOV r0,#0
0003b0 e5c40000 STRB r0,[r4,#0]
0003b4 e3a00001 MOV r0,#1
0003b8 eaffffd4 B |L1.784|
|L1.956|
0003bc e1a00000 MOV r0,r0
0003c0 e1a00000 MOV r0,r0
|L1.964|
0003c4 e1a00005 MOV r0,r5
0003c8 ebfffffe BL OSTmr_Free
0003cc ebfffffe BL OSTmr_Unlock
0003d0 e3a00000 MOV r0,#0
0003d4 e5c40000 STRB r0,[r4,#0]
0003d8 e3a00001 MOV r0,#1
0003dc eaffffcb B |L1.784|
|L1.992|
0003e0 e1a00000 MOV r0,r0
0003e4 ebfffffe BL OSTmr_Unlock
0003e8 e3a00087 MOV r0,#0x87
0003ec e5c40000 STRB r0,[r4,#0]
0003f0 e3a00000 MOV r0,#0
0003f4 eaffffc5 B |L1.784|
|L1.1016|
0003f8 e1a00000 MOV r0,r0
0003fc ebfffffe BL OSTmr_Unlock
000400 e3a0008d MOV r0,#0x8d
000404 e5c40000 STRB r0,[r4,#0]
000408 e3a00000 MOV r0,#0
00040c eaffffbf B |L1.784|
ENDP
OSTmrNameGet PROC
;;;290 INT8U *perr)
;;;291 {
000410 e92d41f0 PUSH {r4-r8,lr}
000414 e1a04000 MOV r4,r0
000418 e1a05001 MOV r5,r1
00041c e1a06002 MOV r6,r2
;;;292 INT8U len;
;;;293
;;;294
;;;295 #if OS_ARG_CHK_EN > 0
;;;296 if (perr == (INT8U *)0) {
000420 e3560000 CMP r6,#0
000424 1a000002 BNE |L1.1076|
;;;297 return (0);
000428 e3a00000 MOV r0,#0
|L1.1068|
00042c e8bd41f0 POP {r4-r8,lr}
;;;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 */
;;;309 *perr = OS_ERR_TMR_INVALID_TYPE;
;;;310 return (0);
;;;311 }
;;;312 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
;;;313 *perr = OS_ERR_TMR_ISR;
;;;314 return (0);
;;;315 }
;;;316 OSTmr_Lock();
;;;317 switch (ptmr->OSTmrState) {
;;;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);
;;;322 OSTmr_Unlock();
;;;323 *perr = OS_ERR_NONE;
;;;324 return (len);
;;;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 }
000430 e12fff1e BX lr
|L1.1076|
000434 e3550000 CMP r5,#0
000438 1a000003 BNE |L1.1100|
00043c e3a00088 MOV r0,#0x88
000440 e5c60000 STRB r0,[r6,#0]
000444 e3a00000 MOV r0,#0
000448 eafffff7 B |L1.1068|
|L1.1100|
00044c e3540000 CMP r4,#0
000450 1a000003 BNE |L1.1124|
000454 e3a0008a MOV r0,#0x8a
000458 e5c60000 STRB r0,[r6,#0]
00045c e3a00000 MOV r0,#0
000460 eafffff1 B |L1.1068|
|L1.1124|
000464 e5d40000 LDRB r0,[r4,#0]
000468 e3500064 CMP r0,#0x64
00046c 0a000003 BEQ |L1.1152|
000470 e3a00089 MOV r0,#0x89
000474 e5c60000 STRB r0,[r6,#0]
000478 e3a00000 MOV r0,#0
00047c eaffffea B |L1.1068|
|L1.1152|
000480 e59f08f0 LDR r0,|L1.3448|
000484 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000488 e3500000 CMP r0,#0
00048c da000003 BLE |L1.1184|
000490 e3a0008b MOV r0,#0x8b
000494 e5c60000 STRB r0,[r6,#0]
000498 e3a00000 MOV r0,#0
00049c eaffffe2 B |L1.1068|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -