📄 os_tmr.lst
字号:
150 #endif
151 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
\ ??OSTmrCreate_5:
\ 00000080 ........ LDR R0,??DataTable7 ;; OSIntNesting
\ 00000084 0000D0E5 LDRB R0,[R0, #+0]
\ 00000088 010050E3 CMP R0,#+1
\ 0000008C 0300003A BCC ??OSTmrCreate_6
152 *perr = OS_ERR_TMR_ISR;
\ 00000090 8B00A0E3 MOV R0,#+139
\ 00000094 0000C9E5 STRB R0,[R9, #+0]
153 return ((OS_TMR *)0);
\ 00000098 0000A0E3 MOV R0,#+0
\ 0000009C 290000EA B ??OSTmrCreate_1
154 }
155 OSTmr_Lock();
\ ??OSTmrCreate_6:
\ 000000A0 ........ BL OSTmr_Lock
156 ptmr = OSTmr_Alloc(); /* Obtain a timer from the free pool */
\ 000000A4 ........ BL OSTmr_Alloc
\ 000000A8 00A0B0E1 MOVS R10,R0
157 if (ptmr == (OS_TMR *)0) {
\ 000000AC 00005AE3 CMP R10,#+0
\ 000000B0 0400001A BNE ??OSTmrCreate_7
158 OSTmr_Unlock();
\ 000000B4 ........ BL OSTmr_Unlock
159 *perr = OS_ERR_TMR_NON_AVAIL;
\ 000000B8 8600A0E3 MOV R0,#+134
\ 000000BC 0000C9E5 STRB R0,[R9, #+0]
160 return ((OS_TMR *)0);
\ 000000C0 0000A0E3 MOV R0,#+0
\ 000000C4 1F0000EA B ??OSTmrCreate_1
161 }
162 ptmr->OSTmrState = OS_TMR_STATE_STOPPED; /* Indicate that timer is not running yet */
\ ??OSTmrCreate_7:
\ 000000C8 0100A0E3 MOV R0,#+1
\ 000000CC 3100CAE5 STRB R0,[R10, #+49]
163 ptmr->OSTmrDly = dly;
\ 000000D0 18408AE5 STR R4,[R10, #+24]
164 ptmr->OSTmrPeriod = period;
\ 000000D4 1C508AE5 STR R5,[R10, #+28]
165 ptmr->OSTmrOpt = opt;
\ 000000D8 3060CAE5 STRB R6,[R10, #+48]
166 ptmr->OSTmrCallback = callback;
\ 000000DC 00009DE5 LDR R0,[SP, #+0]
\ 000000E0 04008AE5 STR R0,[R10, #+4]
167 ptmr->OSTmrCallbackArg = callback_arg;
\ 000000E4 08708AE5 STR R7,[R10, #+8]
168 #if OS_TMR_CFG_NAME_SIZE > 0
169 if (pname !=(INT8U *)0) {
\ 000000E8 000058E3 CMP R8,#+0
\ 000000EC 1100000A BEQ ??OSTmrCreate_8
170 len = OS_StrLen(pname); /* Copy timer name */
\ 000000F0 0800B0E1 MOVS R0,R8
\ 000000F4 ........ _BLF OS_StrLen,??OS_StrLen??rA
\ 000000F8 00B0B0E1 MOVS R11,R0
171 if (len < OS_TMR_CFG_NAME_SIZE) {
\ 000000FC 10005BE3 CMP R11,#+16
\ 00000100 0300002A BCS ??OSTmrCreate_9
172 (void)OS_StrCopy(ptmr->OSTmrName, pname);
\ 00000104 0810B0E1 MOVS R1,R8
\ 00000108 20009AE2 ADDS R0,R10,#+32
\ 0000010C ........ _BLF OS_StrCopy,??OS_StrCopy??rA
\ 00000110 080000EA B ??OSTmrCreate_8
173 } else {
174 #if OS_TMR_CFG_NAME_SIZE > 1
175 ptmr->OSTmrName[0] = '#'; /* Invalid size specified */
\ ??OSTmrCreate_9:
\ 00000114 2300A0E3 MOV R0,#+35
\ 00000118 2000CAE5 STRB R0,[R10, #+32]
176 ptmr->OSTmrName[1] = OS_ASCII_NUL;
\ 0000011C 0000A0E3 MOV R0,#+0
\ 00000120 2100CAE5 STRB R0,[R10, #+33]
177 #endif
178 *perr = OS_ERR_TMR_NAME_TOO_LONG;
\ 00000124 8C00A0E3 MOV R0,#+140
\ 00000128 0000C9E5 STRB R0,[R9, #+0]
179 OSTmr_Unlock();
\ 0000012C ........ BL OSTmr_Unlock
180 return (ptmr);
\ 00000130 0A00B0E1 MOVS R0,R10
\ 00000134 030000EA B ??OSTmrCreate_1
181 }
182 }
183 #endif
184 OSTmr_Unlock();
\ ??OSTmrCreate_8:
\ 00000138 ........ BL OSTmr_Unlock
185 *perr = OS_ERR_NONE;
\ 0000013C 0000A0E3 MOV R0,#+0
\ 00000140 0000C9E5 STRB R0,[R9, #+0]
186 return (ptmr);
\ 00000144 0A00B0E1 MOVS R0,R10
\ ??OSTmrCreate_1:
\ 00000148 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning
\ 0000014C F08FBDE8 POP {R4-R11,PC} ;; return
187 }
188 #endif
189
190 /*$PAGE*/
191 /*
192 ************************************************************************************************************************
193 * DELETE A TIMER
194 *
195 * Description: This function is called by your application code to delete a timer.
196 *
197 * Arguments : ptmr Is a pointer to the timer to stop and delete.
198 *
199 * perr Is a pointer to an error code. '*perr' will contain one of the following:
200 * OS_ERR_NONE
201 * OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer
202 * OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR
203 * OS_ERR_TMR_ISR if the function was called from an ISR
204 * OS_ERR_TMR_INACTIVE if the timer was not created
205 * OS_ERR_TMR_INVALID_STATE the timer is in an invalid state
206 *
207 * Returns : OS_TRUE If the call was successful
208 * OS_FALSE If not
209 ************************************************************************************************************************
210 */
211
212 #if OS_TMR_EN > 0
\ In segment CODE, align 4, keep-with-next
213 BOOLEAN OSTmrDel (OS_TMR *ptmr,
214 INT8U *perr)
215 {
\ OSTmrDel:
\ 00000000 30402DE9 PUSH {R4,R5,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS R5,R1
216 #if OS_ARG_CHK_EN > 0
217 if (perr == (INT8U *)0) { /* Validate arguments */
\ 0000000C 000055E3 CMP R5,#+0
\ 00000010 0100001A BNE ??OSTmrDel_1
218 return (OS_FALSE);
\ 00000014 0000A0E3 MOV R0,#+0
\ 00000018 350000EA B ??OSTmrDel_2
219 }
220 if (ptmr == (OS_TMR *)0) {
\ ??OSTmrDel_1:
\ 0000001C 000054E3 CMP R4,#+0
\ 00000020 0300001A BNE ??OSTmrDel_3
221 *perr = OS_ERR_TMR_INVALID;
\ 00000024 8A00A0E3 MOV R0,#+138
\ 00000028 0000C5E5 STRB R0,[R5, #+0]
222 return (OS_FALSE);
\ 0000002C 0000A0E3 MOV R0,#+0
\ 00000030 2F0000EA B ??OSTmrDel_2
223 }
224 #endif
225 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
\ ??OSTmrDel_3:
\ 00000034 0000D4E5 LDRB R0,[R4, #+0]
\ 00000038 640050E3 CMP R0,#+100
\ 0000003C 0300000A BEQ ??OSTmrDel_4
226 *perr = OS_ERR_TMR_INVALID_TYPE;
\ 00000040 8900A0E3 MOV R0,#+137
\ 00000044 0000C5E5 STRB R0,[R5, #+0]
227 return (OS_FALSE);
\ 00000048 0000A0E3 MOV R0,#+0
\ 0000004C 280000EA B ??OSTmrDel_2
228 }
229 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
\ ??OSTmrDel_4:
\ 00000050 ........ LDR R0,??DataTable7 ;; OSIntNesting
\ 00000054 0000D0E5 LDRB R0,[R0, #+0]
\ 00000058 010050E3 CMP R0,#+1
\ 0000005C 0300003A BCC ??OSTmrDel_5
230 *perr = OS_ERR_TMR_ISR;
\ 00000060 8B00A0E3 MOV R0,#+139
\ 00000064 0000C5E5 STRB R0,[R5, #+0]
231 return (OS_FALSE);
\ 00000068 0000A0E3 MOV R0,#+0
\ 0000006C 200000EA B ??OSTmrDel_2
232 }
233 OSTmr_Lock();
\ ??OSTmrDel_5:
\ 00000070 ........ BL OSTmr_Lock
234 switch (ptmr->OSTmrState) {
\ 00000074 3100D4E5 LDRB R0,[R4, #+49]
\ 00000078 030050E3 CMP R0,#+3
\ 0000007C 1800008A BHI ??OSTmrDel_6
\ 00000080 011F8FE2 ADR R1,??OSTmrDel_0
\ 00000084 0010D1E7 LDRB R1,[R1, R0]
\ 00000088 01F18FE0 ADD PC,PC,R1, LSL #+2
\ ??OSTmrDel_0:
\ 0000008C 10090900 DC8 +16,+9,+9,+0
235 case OS_TMR_STATE_RUNNING:
236 OSTmr_Unlink(ptmr); /* Remove from current wheel spoke */
\ ??OSTmrDel_7:
\ 00000090 0400B0E1 MOVS R0,R4
\ 00000094 ........ BL OSTmr_Unlink
237 OSTmr_Free(ptmr); /* Return timer to free list of timers */
\ 00000098 0400B0E1 MOVS R0,R4
\ 0000009C ........ BL OSTmr_Free
238 OSTmr_Unlock();
\ 000000A0 ........ BL OSTmr_Unlock
239 *perr = OS_ERR_NONE;
\ 000000A4 0000A0E3 MOV R0,#+0
\ 000000A8 0000C5E5 STRB R0,[R5, #+0]
240 return (OS_TRUE);
\ 000000AC 0100A0E3 MOV R0,#+1
\ 000000B0 0F0000EA B ??OSTmrDel_2
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 */
\ ??OSTmrDel_8:
\ 000000B4 0400B0E1 MOVS R0,R4
\ 000000B8 ........ BL OSTmr_Free
245 OSTmr_Unlock();
\ 000000BC ........ BL OSTmr_Unlock
246 *perr = OS_ERR_NONE;
\ 000000C0 0000A0E3 MOV R0,#+0
\ 000000C4 0000C5E5 STRB R0,[R5, #+0]
247 return (OS_TRUE);
\ 000000C8 0100A0E3 MOV R0,#+1
\ 000000CC 080000EA B ??OSTmrDel_2
248
249 case OS_TMR_STATE_UNUSED: /* Already deleted */
250 OSTmr_Unlock();
\ ??OSTmrDel_9:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -