📄 os_tmr.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.42A/W32 KICKSTART 26/Dec/2008 18:22:04 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = thumb #
# Endian = little #
# Stack alignment = 4 #
# Source file = F:\PROJECT\STM32_UCOSII\uCOS-II\Source\os_tmr.c #
# Command line = F:\PROJECT\STM32_UCOSII\uCOS-II\Source\os_tmr.c #
# -lCN F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E- #
# EVAL\IAR\OS-Probe\Flash\List\ -o #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\Flash\Obj\ -z6 --no_unroll --no_inline #
# --no_tbaa --no_scheduling --debug --cpu_mode thumb #
# --endian little --cpu cortex-M3 --stack_align 4 -e #
# --fpu None --dlib_config "E:\Program Files\IAR #
# Systems\Embedded Workbench 4.0 #
# Kickstart\arm\LIB\dl7mptnnl8n.h" -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\ -I F:\PROJECT\STM32_UCOSII\EvalBoards\ #
# ST\STM3210E-EVAL\IAR\OS-Probe\..\BSP\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\CPU\ST\STM32\inc\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-CPU\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-CPU\ARM-Cortex-M3\IAR #
# \ -I F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E- #
# EVAL\IAR\OS-Probe\..\..\..\..\..\uC-LCD\Source\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-LIB\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uCOS-II\Ports\ARM-Cortex #
# -M3\Generic\IAR\ -I F:\PROJECT\STM32_UCOSII\EvalBoar #
# ds\ST\STM3210E-EVAL\IAR\OS-Probe\..\..\..\..\..\uCOS #
# -II\Source\ -I F:\PROJECT\STM32_UCOSII\EvalBoards\ST #
# \STM3210E-EVAL\IAR\OS-Probe\..\..\..\..\..\uC-Probe\ #
# Target\Communication\Generic\RS-232\Source\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-Probe\Target\Communic #
# ation\Generic\RS-232\Ports\ST\STM32\ -I #
# F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\..\..\..\..\..\uC-Probe\Target\Communic #
# ation\Generic\Source\ -I F:\PROJECT\STM32_UCOSII\Eva #
# lBoards\ST\STM3210E-EVAL\IAR\OS-Probe\..\..\..\..\.. #
# \uC-Probe\Target\Plugins\uCOS-II\ -I "E:\Program #
# Files\IAR Systems\Embedded Workbench 4.0 #
# Kickstart\arm\INC\" #
# List file = F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\Flash\List\os_tmr.lst #
# Object file = F:\PROJECT\STM32_UCOSII\EvalBoards\ST\STM3210E-EVAL\ #
# IAR\OS-Probe\Flash\Obj\os_tmr.r79 #
# #
# #
##############################################################################
F:\PROJECT\STM32_UCOSII\uCOS-II\Source\os_tmr.c
1 /*
2 ************************************************************************************************************************
3 * uC/OS-II
4 * The Real-Time Kernel
5 * TIMER MANAGEMENT
6 *
7 * (c) Copyright 1992-2007, Micrium, Weston, FL
8 * All Rights Reserved
9 *
10 *
11 * File : OS_TMR.C
12 * By : Jean J. Labrosse
13 * Version : V2.86
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.
108 * This is the 'handle' that your application will use to reference the timer created.
109 ************************************************************************************************************************
110 */
111
112 #if OS_TMR_EN > 0
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 {
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 */
129 return ((OS_TMR *)0);
130 }
131 switch (opt) {
132 case OS_TMR_OPT_PERIODIC:
133 if (period == 0) {
134 *perr = OS_ERR_TMR_INVALID_PERIOD;
135 return ((OS_TMR *)0);
136 }
137 break;
138
139 case OS_TMR_OPT_ONE_SHOT:
140 if (dly == 0) {
141 *perr = OS_ERR_TMR_INVALID_DLY;
142 return ((OS_TMR *)0);
143 }
144 break;
145
146 default:
147 *perr = OS_ERR_TMR_INVALID_OPT;
148 return ((OS_TMR *)0);
149 }
150 #endif
151 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
152 *perr = OS_ERR_TMR_ISR;
153 return ((OS_TMR *)0);
154 }
155 OSTmr_Lock();
156 ptmr = OSTmr_Alloc(); /* Obtain a timer from the free pool */
157 if (ptmr == (OS_TMR *)0) {
158 OSTmr_Unlock();
159 *perr = OS_ERR_TMR_NON_AVAIL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -