📄 os_tmr.txt
字号:
000154 f04ff04f MOV r12,#0
000158 4283 CMP r3,r0
00015a d104 BNE |L1.358|
;;;1011 ptmr1 = (OS_TMR *)ptmr->OSTmrNext;
;;;1012 pspoke->OSTmrFirst = (void *)ptmr1;
00015c 600a STR r2,[r1,#0]
;;;1013 if (ptmr1 != (OS_TMR *)0) {
00015e b132 CBZ r2,|L1.366|
;;;1014 ptmr1->OSTmrPrev = (void *)0;
000160 f8c2f8c2 STR r12,[r2,#0x10]
000164 e003 B |L1.366|
|L1.358|
;;;1015 }
;;;1016 } else {
;;;1017 ptmr1 = (OS_TMR *)ptmr->OSTmrPrev; /* Remove timer from somewhere in the list */
000166 6903 LDR r3,[r0,#0x10]
;;;1018 ptmr2 = (OS_TMR *)ptmr->OSTmrNext;
;;;1019 ptmr1->OSTmrNext = ptmr2;
000168 60da STR r2,[r3,#0xc]
;;;1020 if (ptmr2 != (OS_TMR *)0) {
00016a b102 CBZ r2,|L1.366|
;;;1021 ptmr2->OSTmrPrev = (void *)ptmr1;
00016c 6113 STR r3,[r2,#0x10]
|L1.366|
;;;1022 }
;;;1023 }
;;;1024 ptmr->OSTmrState = OS_TMR_STATE_STOPPED;
00016e 2201 MOVS r2,#1
000170 f880f880 STRB r2,[r0,#0x31]
;;;1025 ptmr->OSTmrNext = (void *)0;
000174 f8c0f8c0 STR r12,[r0,#0xc]
;;;1026 ptmr->OSTmrPrev = (void *)0;
000178 f8c0f8c0 STR r12,[r0,#0x10]
;;;1027 pspoke->OSTmrEntries--;
00017c 8888 LDRH r0,[r1,#4]
00017e 1e40 SUBS r0,r0,#1
000180 8088 STRH r0,[r1,#4]
;;;1028 }
000182 4770 BX lr
;;;1029 #endif
ENDP
OSTmrDel PROC
;;;214 INT8U *perr)
;;;215 {
000184 b570 PUSH {r4-r6,lr}
000186 4605 MOV r5,r0
000188 460c MOV r4,r1
;;;216 #if OS_ARG_CHK_EN > 0
;;;217 if (perr == (INT8U *)0) { /* Validate arguments */
00018a b90c CBNZ r4,|L1.400|
;;;218 return (OS_FALSE);
00018c 2000 MOVS r0,#0
;;;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 }
00018e bd70 POP {r4-r6,pc}
|L1.400|
000190 b91d CBNZ r5,|L1.410|
000192 208a MOVS r0,#0x8a
000194 7020 STRB r0,[r4,#0]
000196 2000 MOVS r0,#0
000198 bd70 POP {r4-r6,pc}
|L1.410|
00019a 7828 LDRB r0,[r5,#0]
00019c 2864 CMP r0,#0x64
00019e d003 BEQ |L1.424|
0001a0 2089 MOVS r0,#0x89
0001a2 7020 STRB r0,[r4,#0]
0001a4 2000 MOVS r0,#0
0001a6 bd70 POP {r4-r6,pc}
|L1.424|
0001a8 4892 LDR r0,|L1.1012|
0001aa 7800 LDRB r0,[r0,#0] ; OSIntNesting
0001ac b118 CBZ r0,|L1.438|
0001ae 208b MOVS r0,#0x8b
0001b0 7020 STRB r0,[r4,#0]
0001b2 2000 MOVS r0,#0
0001b4 bd70 POP {r4-r6,pc}
|L1.438|
0001b6 f7fff7ff BL OSTmr_Lock
0001ba f895f895 LDRB r0,[r5,#0x31]
0001be b1c8 CBZ r0,|L1.500|
0001c0 2600 MOVS r6,#0
0001c2 2801 CMP r0,#1
0001c4 d00e BEQ |L1.484|
0001c6 2802 CMP r0,#2
0001c8 d00c BEQ |L1.484|
0001ca 2803 CMP r0,#3
0001cc d118 BNE |L1.512|
0001ce 4628 MOV r0,r5
0001d0 f7fff7ff BL OSTmr_Unlink
0001d4 4628 MOV r0,r5
0001d6 f7fff7ff BL OSTmr_Free
0001da f7fff7ff BL OSTmr_Unlock
0001de 7026 STRB r6,[r4,#0]
0001e0 2001 MOVS r0,#1
0001e2 bd70 POP {r4-r6,pc}
|L1.484|
0001e4 4628 MOV r0,r5
0001e6 f7fff7ff BL OSTmr_Free
0001ea f7fff7ff BL OSTmr_Unlock
0001ee 7026 STRB r6,[r4,#0]
0001f0 2001 MOVS r0,#1
0001f2 bd70 POP {r4-r6,pc}
|L1.500|
0001f4 f7fff7ff BL OSTmr_Unlock
0001f8 2087 MOVS r0,#0x87
0001fa 7020 STRB r0,[r4,#0]
0001fc 2000 MOVS r0,#0
0001fe bd70 POP {r4-r6,pc}
|L1.512|
000200 f7fff7ff BL OSTmr_Unlock
000204 208d MOVS r0,#0x8d
000206 7020 STRB r0,[r4,#0]
000208 2000 MOVS r0,#0
00020a bd70 POP {r4-r6,pc}
;;;260 #endif
ENDP
OSTmrNameGet PROC
;;;290 INT8U *perr)
;;;291 {
00020c b570 PUSH {r4-r6,lr}
00020e 4605 MOV r5,r0
000210 460e MOV r6,r1
000212 4614 MOV r4,r2
;;;292 INT8U len;
;;;293
;;;294
;;;295 #if OS_ARG_CHK_EN > 0
;;;296 if (perr == (INT8U *)0) {
000214 b90c CBNZ r4,|L1.538|
;;;297 return (0);
000216 2000 MOVS r0,#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 */
;;;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_NAME_GET_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 }
000218 bd70 POP {r4-r6,pc}
|L1.538|
00021a b91e CBNZ r6,|L1.548|
00021c 2088 MOVS r0,#0x88
00021e 7020 STRB r0,[r4,#0]
000220 2000 MOVS r0,#0
000222 bd70 POP {r4-r6,pc}
|L1.548|
000224 b91d CBNZ r5,|L1.558|
000226 208a MOVS r0,#0x8a
000228 7020 STRB r0,[r4,#0]
00022a 2000 MOVS r0,#0
00022c bd70 POP {r4-r6,pc}
|L1.558|
00022e 7828 LDRB r0,[r5,#0]
000230 2864 CMP r0,#0x64
000232 d003 BEQ |L1.572|
000234 2089 MOVS r0,#0x89
000236 7020 STRB r0,[r4,#0]
000238 2000 MOVS r0,#0
00023a bd70 POP {r4-r6,pc}
|L1.572|
00023c 486d LDR r0,|L1.1012|
00023e 7800 LDRB r0,[r0,#0] ; OSIntNesting
000240 b118 CBZ r0,|L1.586|
000242 2011 MOVS r0,#0x11
000244 7020 STRB r0,[r4,#0]
000246 2000 MOVS r0,#0
000248 bd70 POP {r4-r6,pc}
|L1.586|
00024a f7fff7ff BL OSTmr_Lock
00024e f895f895 LDRB r0,[r5,#0x31]
000252 b188 CBZ r0,|L1.632|
000254 2801 CMP r0,#1
000256 d003 BEQ |L1.608|
000258 2802 CMP r0,#2
00025a d001 BEQ |L1.608|
00025c 2803 CMP r0,#3
00025e d111 BNE |L1.644|
|L1.608|
000260 f105f105 ADD r1,r5,#0x20
000264 4630 MOV r0,r6
000266 f7fff7ff BL OS_StrCopy
00026a 4605 MOV r5,r0
00026c f7fff7ff BL OSTmr_Unlock
000270 2000 MOVS r0,#0
000272 7020 STRB r0,[r4,#0]
000274 4628 MOV r0,r5
000276 bd70 POP {r4-r6,pc}
|L1.632|
000278 f7fff7ff BL OSTmr_Unlock
00027c 2087 MOVS r0,#0x87
00027e 7020 STRB r0,[r4,#0]
000280 2000 MOVS r0,#0
000282 bd70 POP {r4-r6,pc}
|L1.644|
000284 f7fff7ff BL OSTmr_Unlock
000288 208d MOVS r0,#0x8d
00028a 7020 STRB r0,[r4,#0]
00028c 2000 MOVS r0,#0
00028e bd70 POP {r4-r6,pc}
;;;337 #endif
ENDP
OSTmrRemainGet PROC
;;;364 INT8U *perr)
;;;365 {
000290 e92de92d PUSH {r4-r8,lr}
000294 4605 MOV r5,r0
000296 460c MOV r4,r1
;;;366 INT32U remain;
;;;367
;;;368
;;;369 #if OS_ARG_CHK_EN > 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -