📄 os_tmr.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.42A/W32 KICKSTART 10/Jan/2008 16:48:31 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = arm #
# Endian = little #
# Stack alignment = 4 #
# Source file = D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \uCOS-II\Source\os_tmr.c #
# Command line = D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \uCOS-II\Source\os_tmr.c -lCN #
# D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \EvalBoards\NXP\LPC2468-EA\IAR\OS-View\Flash\List\ #
# -o D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Softw #
# are\EvalBoards\NXP\LPC2468-EA\IAR\OS-View\Flash\Obj\ #
# -z3 --no_cse --no_unroll --no_inline #
# --no_code_motion --no_tbaa --no_clustering #
# --no_scheduling --debug --cpu_mode arm --endian #
# little --cpu ARM7TDMI-S --stack_align 4 -e --fpu #
# None --dlib_config "C:\Program Files\IAR #
# Systems\Embedded Workbench 4.0 #
# Kickstart\arm\LIB\dl4tpannl8n.h" -I #
# D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \EvalBoards\NXP\LPC2468-EA\IAR\OS-View\ -I #
# D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \EvalBoards\NXP\LPC2468-EA\IAR\OS-View\..\..\..\..\. #
# .\ucos-ii\ports\arm\generic\iar\ -I #
# D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \EvalBoards\NXP\LPC2468-EA\IAR\OS-View\..\..\..\..\. #
# .\ucos-ii\source\ -I D:\work\资料\嵌入式操作系统\UCO #
# S-II\Micrium\Software\EvalBoards\NXP\LPC2468-EA\IAR\ #
# OS-View\..\..\..\..\..\ucosview\source\ -I #
# D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \EvalBoards\NXP\LPC2468-EA\IAR\OS-View\..\..\..\..\. #
# .\ucosview\ports\arm7\lpc2468\iar\ -I #
# D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \EvalBoards\NXP\LPC2468-EA\IAR\OS-View\..\..\..\..\. #
# .\uc-lib\ -I D:\work\资料\嵌入式操作系统\UCOS-II\Mic #
# rium\Software\EvalBoards\NXP\LPC2468-EA\IAR\OS-View\ #
# ..\..\..\..\..\uc-cpu\ -I #
# D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \EvalBoards\NXP\LPC2468-EA\IAR\OS-View\..\..\..\..\. #
# .\uc-cpu\arm\IAR\ -I D:\work\资料\嵌入式操作系统\UCO #
# S-II\Micrium\Software\EvalBoards\NXP\LPC2468-EA\IAR\ #
# OS-View\..\BSP\ -I "C:\Program Files\IAR #
# Systems\Embedded Workbench 4.0 Kickstart\arm\INC\" #
# List file = D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \EvalBoards\NXP\LPC2468-EA\IAR\OS-View\Flash\List\os #
# _tmr.lst #
# Object file = D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software #
# \EvalBoards\NXP\LPC2468-EA\IAR\OS-View\Flash\Obj\os_ #
# tmr.r79 #
# #
# #
##############################################################################
D:\work\资料\嵌入式操作系统\UCOS-II\Micrium\Software\uCOS-II\Source\os_tmr.c
1 /*
2 ************************************************************************************************************************
3 * uC/OS-III
4 * The Real-Time Kernel
5 *
6 * (c) Copyright 2005-2007, Micrium, Weston, FL
7 * All Rights Reserved
8 *
9 * TIMER MANAGEMENT
10 *
11 * File : OS_TMR.C
12 * By : Jean J. Labrosse
13 * Version : V2.84
14 *
15 * LICENSING TERMS:
16 * ---------------
17 * uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research.
18 * If you plan on using uC/OS-II in a commercial product you need to contact Micri祄 to properly license
19 * its use in your product. We provide ALL the source code for your convenience and to help you experience
20 * uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a
21 * licensing fee.
22 ************************************************************************************************************************
23 */
24
25 #include <ucos_ii.h>
26
27 /*
28 ************************************************************************************************************************
29 * NOTES
30 *
31 * 1) Your application MUST define the following #define constants:
32 *
33 * OS_TASK_TMR_PRIO The priority of the Timer management task
34 * OS_TASK_TMR_STK_SIZE The size of the Timer management task's stack
35 *
36 * 2) You must call OSTmrSignal() to notify the Timer management task that it's time to update the timers.
37 ************************************************************************************************************************
38 */
39
40 /*
41 ************************************************************************************************************************
42 * CONSTANTS
43 ************************************************************************************************************************
44 */
45
46 #define OS_TMR_LINK_DLY 0
47 #define OS_TMR_LINK_PERIODIC 1
48
49 /*
50 ************************************************************************************************************************
51 * LOCAL PROTOTYPES
52 ************************************************************************************************************************
53 */
54
55 #if OS_TMR_EN > 0
56 static OS_TMR *OSTmr_Alloc (void);
57 static void OSTmr_Free (OS_TMR *ptmr);
58 static void OSTmr_InitTask (void);
59 static void OSTmr_Link (OS_TMR *ptmr, INT8U type);
60 static void OSTmr_Unlink (OS_TMR *ptmr);
61 static void OSTmr_Lock (void);
62 static void OSTmr_Unlock (void);
63 static void OSTmr_Task (void *p_arg);
64 #endif
65
66 /*$PAGE*/
67 /*
68 ************************************************************************************************************************
69 * CREATE A TIMER
70 *
71 * Description: This function is called by your application code to create a timer.
72 *
73 * Arguments : dly Initial delay.
74 * If the timer is configured for ONE-SHOT mode, this is the timeout used
75 * If the timer is configured for PERIODIC mode, this is the first timeout to wait for
76 * before the timer starts entering periodic mode
77 *
78 * period The 'period' being repeated for the timer.
79 * If you specified 'OS_TMR_OPT_PERIODIC' as an option, when the timer expires, it will
80 * automatically restart with the same period.
81 *
82 * opt Specifies either:
83 * OS_TMR_OPT_ONE_SHOT The timer counts down only once
84 * OS_TMR_OPT_PERIODIC The timer counts down and then reloads itself
85 *
86 * callback Is a pointer to a callback function that will be called when the timer expires. The
87 * callback function must be declared as follows:
88 *
89 * void MyCallback (OS_TMR *ptmr, void *p_arg);
90 *
91 * callback_arg Is an argument (a pointer) that is passed to the callback function when it is called.
92 *
93 * pname Is a pointer to an ASCII string that is used to name the timer. Names are useful for
94 * debugging. The length of the ASCII string for the name can be as big as:
95 *
96 * OS_TMR_CFG_NAME_SIZE and should be found in OS_CFG.H
97 *
98 * perr Is a pointer to an error code. '*perr' will contain one of the following:
99 * OS_ERR_NONE
100 * OS_ERR_TMR_INVALID_DLY you specified an invalid delay
101 * OS_ERR_TMR_INVALID_PERIOD you specified an invalid period
102 * OS_ERR_TMR_INVALID_OPT you specified an invalid option
103 * OS_ERR_TMR_ISR if the call was made from an ISR
104 * OS_ERR_TMR_NON_AVAIL if there are no free timers from the timer pool
105 * OS_ERR_TMR_NAME_TOO_LONG if the timer name is too long to fit
106 *
107 * Returns : A pointer to an OS_TMR data structure. This is the 'handle' that you application will use to reference
108 * the timer created/started.
109 ************************************************************************************************************************
110 */
111
112 #if OS_TMR_EN > 0
\ In segment CODE, align 4, keep-with-next
113 OS_TMR *OSTmrCreate (INT32U dly,
114 INT32U period,
115 INT8U opt,
116 OS_TMR_CALLBACK callback,
117 void *callback_arg,
118 INT8U *pname,
119 INT8U *perr)
120 {
\ OSTmrCreate:
\ 00000000 F04F2DE9 PUSH {R4-R11,LR}
\ 00000004 0040B0E1 MOVS R4,R0
\ 00000008 0150B0E1 MOVS R5,R1
\ 0000000C 0260B0E1 MOVS R6,R2
\ 00000010 0370B0E1 MOVS R7,R3
\ 00000014 24809DE5 LDR R8,[SP, #+36]
\ 00000018 28909DE5 LDR R9,[SP, #+40]
\ 0000001C 2CA09DE5 LDR R10,[SP, #+44]
121 OS_TMR *ptmr;
122 #if OS_TMR_CFG_NAME_SIZE > 0
123 INT8U len;
124 #endif
125
126
127 #if OS_ARG_CHK_EN > 0
128 if (perr == (INT8U *)0) { /* Validate arguments */
\ 00000020 00005AE3 CMP R10,#+0
\ 00000024 0100001A BNE ??OSTmrCreate_0
129 return ((OS_TMR *)0);
\ 00000028 0000A0E3 MOV R0,#+0
\ 0000002C 3A0000EA B ??OSTmrCreate_1
130 }
131 switch (opt) {
\ ??OSTmrCreate_0:
\ 00000030 0600B0E1 MOVS R0,R6
\ 00000034 010050E3 CMP R0,#+1
\ 00000038 0700000A BEQ ??OSTmrCreate_2
\ 0000003C 020050E3 CMP R0,#+2
\ 00000040 0B00001A BNE ??OSTmrCreate_3
132 case OS_TMR_OPT_PERIODIC:
133 if (period == 0) {
\ ??OSTmrCreate_4:
\ 00000044 000055E3 CMP R5,#+0
\ 00000048 0D00001A BNE ??OSTmrCreate_5
134 *perr = OS_ERR_TMR_INVALID_PERIOD;
\ 0000004C 8300A0E3 MOV R0,#+131
\ 00000050 0000CAE5 STRB R0,[R10, #+0]
135 return ((OS_TMR *)0);
\ 00000054 0000A0E3 MOV R0,#+0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -