📄 os_tmr.lst
字号:
C51 COMPILER V8.17 OS_TMR 03/26/2009 14:24:25 PAGE 1
C51 COMPILER V8.17, COMPILATION OF MODULE OS_TMR
OBJECT MODULE PLACED IN .\out-files\os_tmr.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uCOS II Files\os_tmr.c LARGE BROWSE INCDIR(.\smaRTC;.\SMBus) DEBUG OBJECTEX
-TEND PRINT(.\list-files\os_tmr.lst) TABS(2) OBJECT(.\out-files\os_tmr.obj)
line level source
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 "..\header files\includes.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
C51 COMPILER V8.17 OS_TMR 03/26/2009 14:24:25 PAGE 2
48
49 /*
50 **********************************************************************************************************
-**************
51 * LOCAL PROTOTYPES
52 **********************************************************************************************************
-**************
53 */
54
55 #if OS_TMR_EN > 0
static OS_TMR *OSTmr_Alloc (void) reentrant;
static void OSTmr_Free (OS_TMR *ptmr)reentrant ;
static void OSTmr_InitTask (void) reentrant ;
static void OSTmr_Link (OS_TMR *ptmr, INT8U type) reentrant;
static void OSTmr_Unlink (OS_TMR *ptmr) reentrant;
static void OSTmr_Lock (void) reentrant;
static void OSTmr_Unlock (void) reentrant;
static void OSTmr_Task (void *p_arg) reentrant;
#endif
66
67 /*$PAGE*/
68 /*
69 **********************************************************************************************************
-**************
70 * CREATE A TIMER
71 *
72 * Description: This function is called by your application code to create a timer.
73 *
74 * Arguments : dly Initial delay.
75 * If the timer is configured for ONE-SHOT mode, this is the timeout used
76 * If the timer is configured for PERIODIC mode, this is the first timeout to wa
-it for
77 * before the timer starts entering periodic mode
78 *
79 * period The 'period' being repeated for the timer.
80 * If you specified 'OS_TMR_OPT_PERIODIC' as an option, when the timer expire
-s, it will
81 * automatically restart with the same period.
82 *
83 * opt Specifies either:
84 * OS_TMR_OPT_ONE_SHOT The timer counts down only once
85 * OS_TMR_OPT_PERIODIC The timer counts down and then reloads itself
86 *
87 * callback Is a pointer to a callback function that will be called when the timer expire
-s. The
88 * callback function must be declared as follows:
89 *
90 * void MyCallback (OS_TMR *ptmr, void *p_arg);
91 *
92 * callback_arg Is an argument (a pointer) that is passed to the callback function when it is
- called.
93 *
94 * pname Is a pointer to an ASCII string that is used to name the timer. Names are us
-eful for
95 * debugging. The length of the ASCII string for the name can be as big as:
96 *
97 * OS_TMR_CFG_NAME_SIZE and should be found in OS_CFG.H
98 *
99 * perr Is a pointer to an error code. '*perr' will contain one of the following:
100 * OS_ERR_NONE
101 * OS_ERR_TMR_INVALID_DLY you specified an invalid delay
C51 COMPILER V8.17 OS_TMR 03/26/2009 14:24:25 PAGE 3
102 * OS_ERR_TMR_INVALID_PERIOD you specified an invalid period
103 * OS_ERR_TMR_INVALID_OPT you specified an invalid option
104 * OS_ERR_TMR_ISR if the call was made from an ISR
105 * OS_ERR_TMR_NON_AVAIL if there are no free timers from the timer pool
106 * OS_ERR_TMR_NAME_TOO_LONG if the timer name is too long to fit
107 *
108 * Returns : A pointer to an OS_TMR data structure.
109 * This is the 'handle' that your application will use to reference the timer created.
110 **********************************************************************************************************
-**************
111 */
112
113 #if OS_TMR_EN > 0
OS_TMR *OSTmrCreate (INT32U dly,
INT32U period,
INT8U opt,
OS_TMR_CALLBACK callback,
void *callback_arg,
INT8U *pname,
INT8U *perr) reentrant
{
OS_TMR *ptmr;
#if OS_TMR_CFG_NAME_SIZE > 0
INT8U len;
#endif
#if OS_ARG_CHK_EN > 0
if (perr == (INT8U *)0) { /* Validate arguments
- */
return ((OS_TMR *)0);
}
switch (opt) {
case OS_TMR_OPT_PERIODIC:
if (period == 0) {
*perr = OS_ERR_TMR_INVALID_PERIOD;
return ((OS_TMR *)0);
}
break;
case OS_TMR_OPT_ONE_SHOT:
if (dly == 0) {
*perr = OS_ERR_TMR_INVALID_DLY;
return ((OS_TMR *)0);
}
break;
default:
*perr = OS_ERR_TMR_INVALID_OPT;
return ((OS_TMR *)0);
}
#endif
if (OSIntNesting > 0) { /* See if trying to call from an ISR
- */
*perr = OS_ERR_TMR_ISR;
return ((OS_TMR *)0);
}
OSTmr_Lock();
ptmr = OSTmr_Alloc(); /* Obtain a timer from the free pool
- */
if (ptmr == (OS_TMR *)0) {
OSTmr_Unlock();
C51 COMPILER V8.17 OS_TMR 03/26/2009 14:24:25 PAGE 4
*perr = OS_ERR_TMR_NON_AVAIL;
return ((OS_TMR *)0);
}
ptmr->OSTmrState = OS_TMR_STATE_STOPPED; /* Indicate that timer is not running yet
- */
ptmr->OSTmrDly = dly;
ptmr->OSTmrPeriod = period;
ptmr->OSTmrOpt = opt;
ptmr->OSTmrCallback = callback;
ptmr->OSTmrCallbackArg = callback_arg;
#if OS_TMR_CFG_NAME_SIZE > 0
if (pname !=(INT8U *)0) {
len = OS_StrLen(pname); /* Copy timer name
- */
if (len < OS_TMR_CFG_NAME_SIZE) {
(void)OS_StrCopy(ptmr->OSTmrName, pname);
} else {
#if OS_TMR_CFG_NAME_SIZE > 1
ptmr->OSTmrName[0] = '#'; /* Invalid size specified
- */
ptmr->OSTmrName[1] = OS_ASCII_NUL;
#endif
*perr = OS_ERR_TMR_NAME_TOO_LONG;
OSTmr_Unlock();
return (ptmr);
}
}
#endif
OSTmr_Unlock();
*perr = OS_ERR_NONE;
return (ptmr);
}
#endif
190
191 /*$PAGE*/
192 /*
193 **********************************************************************************************************
-**************
194 * DELETE A TIMER
195 *
196 * Description: This function is called by your application code to delete a timer.
197 *
198 * Arguments : ptmr Is a pointer to the timer to stop and delete.
199 *
200 * perr Is a pointer to an error code. '*perr' will contain one of the following:
201 * OS_ERR_NONE
202 * OS_ERR_TMR_INVALID 'ptmr' is a NULL pointer
203 * OS_ERR_TMR_INVALID_TYPE 'ptmr' is not pointing to an OS_TMR
204 * OS_ERR_TMR_ISR if the function was called from an ISR
205 * OS_ERR_TMR_INACTIVE if the timer was not created
206 * OS_ERR_TMR_INVALID_STATE the timer is in an invalid state
207 *
208 * Returns : OS_TRUE If the call was successful
209 * OS_FALSE If not
210 **********************************************************************************************************
-**************
211 */
212
213 #if OS_TMR_EN > 0 && OS_TMR_DEL_EN >0
BOOLEAN OSTmrDel (OS_TMR *ptmr,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -