diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2011-04-15 14:57:53 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2011-04-15 14:57:53 +0000 |
commit | f1893cbaf513c7f0fbca77240fc59707ad039734 (patch) | |
tree | 4a5128533aa866afa19719584a764f0f83b9d165 /nuttx/include | |
parent | c548df2a3788bfe7527f7fef439d1365cb095e7c (diff) | |
download | px4-nuttx-f1893cbaf513c7f0fbca77240fc59707ad039734.tar.gz px4-nuttx-f1893cbaf513c7f0fbca77240fc59707ad039734.tar.bz2 px4-nuttx-f1893cbaf513c7f0fbca77240fc59707ad039734.zip |
Add time and uptime
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3506 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/include')
-rw-r--r-- | nuttx/include/nuttx/clock.h | 68 | ||||
-rwxr-xr-x | nuttx/include/nuttx/ptimer.h (renamed from nuttx/include/nuttx/rtc.h) | 49 | ||||
-rw-r--r-- | nuttx/include/sys/syscall.h | 16 |
3 files changed, 90 insertions, 43 deletions
diff --git a/nuttx/include/nuttx/clock.h b/nuttx/include/nuttx/clock.h index 9a9523a2e..e06d2c0dd 100644 --- a/nuttx/include/nuttx/clock.h +++ b/nuttx/include/nuttx/clock.h @@ -41,13 +41,42 @@ ****************************************************************************/ #include <nuttx/config.h> + #include <stdint.h> +#include <time.h> /**************************************************************************** * Pro-processor Definitions ****************************************************************************/ +/* Configuration ************************************************************/ +/* Access to raw system clock ***********************************************/ +/* The system timer/counter is supported only if (1) the system clock is not + * disabled and (2) we are not configured to use a hardware periodic timer + * for system time. + */ + +#undef __HAVE_SYSTEM_COUNTER +#if !defined(CONFIG_DISABLE_CLOCK) && !defined(CONFIG_PTIMER) +# define __HAVE_SYSTEM_COUNTER 1 +#else +# define __HAVE_SYSTEM_COUNTER 0 +#endif + +/* Efficient, direct access to OS global timer variables will be supported + * if the execution environment has direct access to kernel global data. + * The code in this execution context can access the kernel global data + * directly if: (1) this is an un-protected, non-kernel build, or (2) + * this code is being built for execution within the kernel. + */ + +#undef __HAVE_KERNEL_GLOBALS +#if !defined(CONFIG_NUTTX_KERNEL) || defined(__KERNEL__) +# define __HAVE_KERNEL_GLOBALS 1 +#else +# define __HAVE_KERNEL_GLOBALS 0 +#endif -/* Timing constants */ +/* Timing constants *********************************************************/ #define NSEC_PER_SEC 1000000000 #define USEC_PER_SEC 1000000 @@ -100,22 +129,30 @@ * Global Data ****************************************************************************/ +#if !defined(CONFIG_DISABLE_CLOCK) + /* Access to raw system clock ***********************************************/ /* Direct access to the system timer/counter is supported only if (1) the - * system clock is not disabled and (2) the executation environement has - * direct access to kernel global data. - * - * The code in this execution context can access the kernel global data - * directly if: (1) this is an un-protected, non-kernel build, or (2) - * this code is being built for execution within the kernel. + * system timer counter is available (i.e., we are not configured to use + * a hardware periodic timer), and (2) the execution environment has direct + * access to kernel global data */ -#if !defined(CONFIG_DISABLE_CLOCK) && \ - (!defined(CONFIG_NUTTX_KERNEL) || defined(__KERNEL__)) +#if !defined(CONFIG_PTIMER) && __HAVE_KERNEL_GLOBALS extern volatile uint32_t g_system_timer; #define clock_systimer() g_system_timer #endif +/* System uptime (in seconds) is only supported by periodic timer hardware */ + +#if defined(CONFIG_UPTIME) +extern volatile uint32_t g_uptime; + +#if __HAVE_KERNEL_GLOBALS +# define clock_uptime() g_uptime +#endif +#endif + /**************************************************************************** * Global Function Prototypes ****************************************************************************/ @@ -131,18 +168,23 @@ extern "C" { #define EXTERN extern #endif -/* If direct access to the system timer/counter is not supported (see above), - * then the value can be obtained via clock_systimer through a system call. +/* Indirect access to the system time is required if (1) we are using a + * hardware periodic timer, OR (2) the execution environment does not have + * direct access to kernel global data */ -#if !defined(CONFIG_DISABLE_CLOCK) && \ - defined(CONFIG_NUTTX_KERNEL) && !defined(__KERNEL__) +#if defined(CONFIG_PTIMER) || !__HAVE_KERNEL_GLOBALS EXTERN uint32_t clock_systimer(void); #endif +#if defined(CONFIG_UPTIME) && !__HAVE_KERNEL_GLOBALS +EXTERN time_t clock_uptime(void); +#endif + #undef EXTERN #ifdef __cplusplus } #endif +#endif /* !CONFIG_DISABLE_CLOCK */ #endif /* __NUTTX_CLOCK_H */ diff --git a/nuttx/include/nuttx/rtc.h b/nuttx/include/nuttx/ptimer.h index 7c3028053..b5b5d65ae 100755 --- a/nuttx/include/nuttx/rtc.h +++ b/nuttx/include/nuttx/ptimer.h @@ -1,5 +1,5 @@ /****************************************************************************
- * include/nuttx/rtc.h
+ * include/nuttx/ptimer.h
*
* Copyright(C) 2011 Uros Platise. All rights reserved.
* Author: Uros Platise <uros.platise@isotel.eu>
@@ -33,8 +33,8 @@ *
****************************************************************************/
-#ifndef __INCLUDE_NUTTX_RTC_H
-#define __INCLUDE_NUTTX_RTC_H
+#ifndef __INCLUDE_NUTTX_PTIMER_H
+#define __INCLUDE_NUTTX_PTIMER_H
/****************************************************************************
* Included Files
@@ -62,32 +62,32 @@ * Public Types
****************************************************************************/
-/* The type of the RTC callback function */
+/* The type of the periodic timer callback function */
-typedef void (*rtc_handler_t)(FAR void *arg);
+typedef void (*ptimer_handler_t)(FAR void *arg);
-/* The RTC vtable */
+/* The periodic timer vtable */
-struct rtc_dev_s;
-struct rtc_ops_s
+struct ptimer_dev_s;
+struct ptimer_ops_s
{
- int (*trigger)(FAR struct rtc_dev_s *dev, FAR void *arg);
- int (*add)(FAR struct rtc_dev_s *dev, FAR void *arg, clock_t period);
- int (*set)(FAR struct rtc_dev_s *dev, FAR void *arg, clock_t period);
- int (*clear)(FAR struct rtc_dev_s *dev, FAR void *arg);
- clock_t (*remainder)(FAR struct rtc_dev_s *dev, FAR void *arg);
- clock_t (*overrun)(FAR struct rtc_dev_s *dev, FAR void *arg);
- int (*exec)(FAR struct rtc_dev_s *dev, clock_t timeout);
+ int (*trigger)(FAR struct ptimer_dev_s *dev, FAR void *arg);
+ int (*add)(FAR struct ptimer_dev_s *dev, FAR void *arg, clock_t period);
+ int (*set)(FAR struct ptimer_dev_s *dev, FAR void *arg, clock_t period);
+ int (*clear)(FAR struct ptimer_dev_s *dev, FAR void *arg);
+ clock_t (*remainder)(FAR struct ptimer_dev_s *dev, FAR void *arg);
+ clock_t (*overrun)(FAR struct ptimer_dev_s *dev, FAR void *arg);
+ int (*exec)(FAR struct ptimer_dev_s *dev, clock_t timeout);
};
-/* RTC private data. This structure only defines the initial fields of the
+/* PTIMER private data. This structure only defines the initial fields of the
* structure visible to the SPI client. The specific implementation may
* add additional, device specific fields
*/
-struct rtc_dev_s
+struct ptimer_dev_s
{
- FAR const struct rtc_ops_s *ops;
+ FAR const struct ptimer_ops_s *ops;
};
/****************************************************************************
@@ -103,22 +103,21 @@ extern "C" { #endif
/****************************************************************************
- * Name: up_rtcinitialize
+ * Name: up_ptimerinitialize
*
* Description:
- * Initialize the RTC interface. This function may be called to obtain
- * multiple instances of the interface
+ * Initialize the periodic timer interface. This function may be called to
+ * obtian multiple instances of the interface
*
* Returned Value:
- * Valid RTC device structre reference on succcess; a NULL on failure
+ * Valid peridic timer device structre reference on succcess; a NULL on failure
*
****************************************************************************/
-EXTERN FAR struct rtc_dev_s *up_rtcinitialize(void);
-
+EXTERN FAR struct ptimer_dev_s *up_ptimerinitialize(void);
#undef EXTERN
#if defined(__cplusplus)
}
#endif
-#endif /* __INCLUDE_NUTTX_RTC_H */
+#endif /* __INCLUDE_NUTTX_PTIMER_H */
diff --git a/nuttx/include/sys/syscall.h b/nuttx/include/sys/syscall.h index 616c39546..5c1570c53 100644 --- a/nuttx/include/sys/syscall.h +++ b/nuttx/include/sys/syscall.h @@ -135,11 +135,17 @@ #ifndef CONFIG_DISABLE_CLOCK # define SYS_clock_systimer (__SYS_clock+0) -# define SYS_clock_getres (__SYS_clock+1) -# define SYS_clock_gettime (__SYS_clock+2) -# define SYS_clock_settime (__SYS_clock+3) -# define SYS_gettimeofday (__SYS_clock+4) -# define __SYS_timers (__SYS_clock+5) +# define SYS_clock_uptime (__SYS_clock+1) +# define SYS_clock_getres (__SYS_clock+2) +# define SYS_clock_gettime (__SYS_clock+3) +# define SYS_clock_settime (__SYS_clock+4) +# define SYS_gettimeofday (__SYS_clock+5) +# ifdef CONFIG_UPTIME +# define SYS_clock_uptime (__SYS_clock+6) +# define __SYS_timers (__SYS_clock+7) +# else +# define __SYS_timers (__SYS_clock+6) +#endif #else # define __SYS_timers __SYS_clock #endif |