📄 os_tmr.lst
字号:
\ 000000D0 ........ BL OSTmr_Unlock
251 *perr = OS_ERR_TMR_INACTIVE;
\ 000000D4 8700A0E3 MOV R0,#+135
\ 000000D8 0000C5E5 STRB R0,[R5, #+0]
252 return (OS_FALSE);
\ 000000DC 0000A0E3 MOV R0,#+0
\ 000000E0 030000EA B ??OSTmrDel_2
253
254 default:
255 OSTmr_Unlock();
\ ??OSTmrDel_6:
\ 000000E4 ........ BL OSTmr_Unlock
256 *perr = OS_ERR_TMR_INVALID_STATE;
\ 000000E8 8D00A0E3 MOV R0,#+141
\ 000000EC 0000C5E5 STRB R0,[R5, #+0]
257 return (OS_FALSE);
\ 000000F0 0000A0E3 MOV R0,#+0
\ ??OSTmrDel_2:
\ 000000F4 3080BDE8 POP {R4,R5,PC} ;; return
258 }
259 }
260 #endif
261
262 /*$PAGE*/
263 /*
264 ************************************************************************************************************************
265 * GET THE NAME OF A TIMER
266 *
267 * Description: This function is called to obtain the name of a timer.
268 *
269 * Arguments : ptmr Is a pointer to the timer to obtain the name for
270 *
271 * pdest Is a pointer to where the name of the timer will be placed. It is the caller's responsibility
272 * to ensure that he has sufficient storage in the destination, i.e. at least OS_TMR_CFG_NAME_SIZE
273 *
274 * perr Is a pointer to an error code. '*perr' will contain one of the following:
275 * OS_ERR_NONE The call was successful
276 * OS_ERR_TMR_INVALID_DEST 'pdest' is a NULL pointer
277 * OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer
278 * OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR
279 * OS_ERR_TMR_ISR if the call was made from an ISR
280 * OS_ERR_TMR_INACTIVE 'ptmr' points to a timer that is not active
281 * OS_ERR_TMR_INVALID_STATE the timer is in an invalid state
282 *
283 * Returns : The length of the string or 0 if the timer does not exist.
284 ************************************************************************************************************************
285 */
286
287 #if OS_TMR_EN > 0 && OS_TMR_CFG_NAME_SIZE > 0
\ In segment CODE, align 4, keep-with-next
288 INT8U OSTmrNameGet (OS_TMR *ptmr,
289 INT8U *pdest,
290 INT8U *perr)
291 {
\ OSTmrNameGet:
\ 00000000 F0402DE9 PUSH {R4-R7,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS R5,R1
\ 0000000C 0260B0E1 MOVS R6,R2
292 INT8U len;
293
294
295 #if OS_ARG_CHK_EN > 0
296 if (perr == (INT8U *)0) {
\ 00000010 000056E3 CMP R6,#+0
\ 00000014 0100001A BNE ??OSTmrNameGet_1
297 return (0);
\ 00000018 0000A0E3 MOV R0,#+0
\ 0000001C 340000EA B ??OSTmrNameGet_2
298 }
299 if (pdest == (INT8U *)0) {
\ ??OSTmrNameGet_1:
\ 00000020 000055E3 CMP R5,#+0
\ 00000024 0300001A BNE ??OSTmrNameGet_3
300 *perr = OS_ERR_TMR_INVALID_DEST;
\ 00000028 8800A0E3 MOV R0,#+136
\ 0000002C 0000C6E5 STRB R0,[R6, #+0]
301 return (0);
\ 00000030 0000A0E3 MOV R0,#+0
\ 00000034 2E0000EA B ??OSTmrNameGet_2
302 }
303 if (ptmr == (OS_TMR *)0) {
\ ??OSTmrNameGet_3:
\ 00000038 000054E3 CMP R4,#+0
\ 0000003C 0300001A BNE ??OSTmrNameGet_4
304 *perr = OS_ERR_TMR_INVALID;
\ 00000040 8A00A0E3 MOV R0,#+138
\ 00000044 0000C6E5 STRB R0,[R6, #+0]
305 return (0);
\ 00000048 0000A0E3 MOV R0,#+0
\ 0000004C 280000EA B ??OSTmrNameGet_2
306 }
307 #endif
308 if (ptmr->OSTmrType != OS_TMR_TYPE) { /* Validate timer structure */
\ ??OSTmrNameGet_4:
\ 00000050 0000D4E5 LDRB R0,[R4, #+0]
\ 00000054 640050E3 CMP R0,#+100
\ 00000058 0300000A BEQ ??OSTmrNameGet_5
309 *perr = OS_ERR_TMR_INVALID_TYPE;
\ 0000005C 8900A0E3 MOV R0,#+137
\ 00000060 0000C6E5 STRB R0,[R6, #+0]
310 return (0);
\ 00000064 0000A0E3 MOV R0,#+0
\ 00000068 210000EA B ??OSTmrNameGet_2
311 }
312 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
\ ??OSTmrNameGet_5:
\ 0000006C ........ LDR R0,??DataTable7 ;; OSIntNesting
\ 00000070 0000D0E5 LDRB R0,[R0, #+0]
\ 00000074 010050E3 CMP R0,#+1
\ 00000078 0300003A BCC ??OSTmrNameGet_6
313 *perr = OS_ERR_TMR_ISR;
\ 0000007C 8B00A0E3 MOV R0,#+139
\ 00000080 0000C6E5 STRB R0,[R6, #+0]
314 return (0);
\ 00000084 0000A0E3 MOV R0,#+0
\ 00000088 190000EA B ??OSTmrNameGet_2
315 }
316 OSTmr_Lock();
\ ??OSTmrNameGet_6:
\ 0000008C ........ BL OSTmr_Lock
317 switch (ptmr->OSTmrState) {
\ 00000090 3100D4E5 LDRB R0,[R4, #+49]
\ 00000094 030050E3 CMP R0,#+3
\ 00000098 1100008A BHI ??OSTmrNameGet_7
\ 0000009C 011F8FE2 ADR R1,??OSTmrNameGet_0
\ 000000A0 0010D1E7 LDRB R1,[R1, R0]
\ 000000A4 01F18FE0 ADD PC,PC,R1, LSL #+2
\ ??OSTmrNameGet_0:
\ 000000A8 09000000 DC8 +9,+0,+0,+0
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);
\ ??OSTmrNameGet_8:
\ 000000AC 201094E2 ADDS R1,R4,#+32
\ 000000B0 0500B0E1 MOVS R0,R5
\ 000000B4 ........ _BLF OS_StrCopy,??OS_StrCopy??rA
\ 000000B8 0070B0E1 MOVS R7,R0
322 OSTmr_Unlock();
\ 000000BC ........ BL OSTmr_Unlock
323 *perr = OS_ERR_NONE;
\ 000000C0 0000A0E3 MOV R0,#+0
\ 000000C4 0000C6E5 STRB R0,[R6, #+0]
324 return (len);
\ 000000C8 0700B0E1 MOVS R0,R7
\ 000000CC 080000EA B ??OSTmrNameGet_2
325
326 case OS_TMR_STATE_UNUSED: /* Timer is not allocated */
327 OSTmr_Unlock();
\ ??OSTmrNameGet_9:
\ 000000D0 ........ BL OSTmr_Unlock
328 *perr = OS_ERR_TMR_INACTIVE;
\ 000000D4 8700A0E3 MOV R0,#+135
\ 000000D8 0000C6E5 STRB R0,[R6, #+0]
329 return (0);
\ 000000DC 0000A0E3 MOV R0,#+0
\ 000000E0 030000EA B ??OSTmrNameGet_2
330
331 default:
332 OSTmr_Unlock();
\ ??OSTmrNameGet_7:
\ 000000E4 ........ BL OSTmr_Unlock
333 *perr = OS_ERR_TMR_INVALID_STATE;
\ 000000E8 8D00A0E3 MOV R0,#+141
\ 000000EC 0000C6E5 STRB R0,[R6, #+0]
334 return (0);
\ 000000F0 0000A0E3 MOV R0,#+0
\ ??OSTmrNameGet_2:
\ 000000F4 F080BDE8 POP {R4-R7,PC} ;; return
335 }
336 }
337 #endif
338
339 /*$PAGE*/
340 /*
341 ************************************************************************************************************************
342 * GET HOW MUCH TIME IS LEFT BEFORE A TIMER EXPIRES
343 *
344 * Description: This function is called to get the number of ticks before a timer times out.
345 *
346 * Arguments : ptmr Is a pointer to the timer to obtain the remaining time from.
347 *
348 * perr Is a pointer to an error code. '*perr' will contain one of the following:
349 * OS_ERR_NONE
350 * OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer
351 * OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR
352 * OS_ERR_TMR_ISR if the call was made from an ISR
353 * OS_ERR_TMR_INACTIVE 'ptmr' points to a timer that is not active
354 * OS_ERR_TMR_INVALID_STATE the timer is in an invalid state
355 *
356 * Returns : The time remaining for the timer to expire. The time represents 'timer' increments. In other words, if
357 * OSTmr_Task() is signaled every 1/10 of a second then the returned value represents the number of 1/10 of
358 * a second remaining before the timer expires.
359 ************************************************************************************************************************
360 */
361
362 #if OS_TMR_EN > 0
\ In segment CODE, align 4, keep-with-next
363 INT32U OSTmrRemainGet (OS_TMR *ptmr,
364 INT8U *perr)
365 {
\ OSTmrRemainGet:
\ 00000000 70402DE9 PUSH {R4-R6,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS R5,R1
366 INT32U remain;
367
368
369 #if OS_ARG_CHK_EN > 0
370 if (perr == (INT8U *)0) {
\ 0000000C 000055E3 CMP R5,#+0
\ 00000010 0100001A BNE ??OSTmrRemainGet_1
371 return (0);
\ 00000014 0000A0E3 MOV R0,#+0
\ 00000018 4A0000EA B ??OSTmrRemainGet_2
372 }
373 if (ptmr == (OS_TMR *)0) {
\ ??OSTmrRemainGet_1:
\ 0000001C 000054E3 CMP R4,#+0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -