⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tod.h

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 H
字号:
/*  tod.h * *  This include file contains all the constants and structures associated *  with the Time of Day Handler. * *  COPYRIGHT (c) 1989-1999. *  On-Line Applications Research Corporation (OAR). * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * *  $Id: tod.h,v 1.18.2.1 2003/09/04 18:55:05 joel Exp $ */#ifndef __TIME_OF_DAY_h#define __TIME_OF_DAY_h#ifdef __cplusplusextern "C" {#endif#include <rtems/score/object.h>#include <rtems/score/watchdog.h>/* *  The following constants are related to the time of day. */#define TOD_SECONDS_PER_MINUTE (unsigned32)60#define TOD_MINUTES_PER_HOUR   (unsigned32)60#define TOD_MONTHS_PER_YEAR    (unsigned32)12#define TOD_DAYS_PER_YEAR      (unsigned32)365#define TOD_HOURS_PER_DAY      (unsigned32)24#define TOD_SECONDS_PER_DAY    (unsigned32) (TOD_SECONDS_PER_MINUTE * \                                TOD_MINUTES_PER_HOUR   * \                                TOD_HOURS_PER_DAY)#define TOD_SECONDS_PER_NON_LEAP_YEAR (365 * TOD_SECONDS_PER_DAY)#define TOD_MILLISECONDS_PER_SECOND     (unsigned32)1000#define TOD_MICROSECONDS_PER_SECOND     (unsigned32)1000000#define TOD_NANOSECONDS_PER_SECOND      (unsigned32)1000000000#define TOD_NANOSECONDS_PER_MICROSECOND (unsigned32)1000/* *  The following constant define the earliest year to which an *  time of day can be initialized.  This is considered the *  epoch. */#define TOD_BASE_YEAR 1988/* *  The following record defines the time of control block.  This *  control block is used to maintain the current time of day. */typedef struct {                   /* RTEID style time/date */  unsigned32 year;                 /* year, A.D. */  unsigned32 month;                /* month, 1 -> 12 */  unsigned32 day;                  /* day, 1 -> 31 */  unsigned32 hour;                 /* hour, 0 -> 23 */  unsigned32 minute;               /* minute, 0 -> 59 */  unsigned32 second;               /* second, 0 -> 59 */  unsigned32 ticks;                /* elapsed ticks between secs */}   TOD_Control;/* *  The following is TRUE if the application has set the current *  time of day, and FALSE otherwise. */SCORE_EXTERN boolean _TOD_Is_set;/* *  The following contains the current time of day. */SCORE_EXTERN TOD_Control _TOD_Current;/* *  The following contains the number of seconds from 00:00:00 *  January 1, TOD_BASE_YEAR until the current time of day. */SCORE_EXTERN Watchdog_Interval _TOD_Seconds_since_epoch;/* *  The following contains the number of microseconds per tick. */SCORE_EXTERN unsigned32 _TOD_Microseconds_per_tick;/* *  The following contains the number of clock ticks per second. * *  NOTE: * *  If one second is NOT evenly divisible by the number of microseconds *  per clock tick, this value will contain only the integer portion *  of the division.  This means that the interval between clock ticks *  can be a source of error in the current time of day. */SCORE_EXTERN unsigned32 _TOD_Ticks_per_second;/* *  This is the control structure for the watchdog timer which *  fires to service the seconds chain. */SCORE_EXTERN Watchdog_Control _TOD_Seconds_watchdog;#ifdef SCORE_INIT/* *  The following array contains the number of days in all months. *  The first dimension should be 1 for leap years, and 0 otherwise. *  The second dimension should range from 1 to 12 for January to *  February, respectively. */const unsigned32 _TOD_Days_per_month[ 2 ][ 13 ] = {  { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },  { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }};/* *  The following array contains the number of days in all months *  up to the month indicated by the index of the second dimension. *  The first dimension should be 1 for leap years, and 0 otherwise. */const unsigned16 _TOD_Days_to_date[2][13] = {  { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 },  { 0, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 }};/* *  The following array contains the number of days in the years *  since the last leap year.  The index should be 0 for leap *  years, and the number of years since the beginning of a leap *  year otherwise. */const unsigned16 _TOD_Days_since_last_leap_year[4] = { 0, 366, 731, 1096 };#elseextern const unsigned16 _TOD_Days_to_date[2][13]; /* Julian days */extern const unsigned16 _TOD_Days_since_last_leap_year[4];extern const unsigned32 _TOD_Days_per_month[2][13];#endif/* *  _TOD_Handler_initialization * *  DESCRIPTION: * *  This routine performs the initialization necessary for this handler. */void _TOD_Handler_initialization(  unsigned32 microseconds_per_tick);/* *  _TOD_Set * *  DESCRIPTION: * *  This routine sets the current time of day to THE_TOD and *  the equivalent SECONDS_SINCE_EPOCH. */void _TOD_Set(  TOD_Control       *the_tod,  Watchdog_Interval  seconds_since_epoch);/* *  _TOD_Validate * *  DESCRIPTION: * *  This function returns TRUE if THE_TOD contains *  a valid time of day, and FALSE otherwise. */boolean _TOD_Validate(  TOD_Control *the_tod);/* *  _TOD_To_seconds * *  DESCRIPTION: * *  This function returns the number seconds between the epoch and THE_TOD. */Watchdog_Interval _TOD_To_seconds(  TOD_Control *the_tod);/* *  _TOD_Tickle * *  DESCRIPTION: * *  This routine is scheduled as a watchdog function and is invoked at *  each second boundary.  It updates the current time of day to indicate *  that a second has passed and processes the seconds watchdog chain. */void _TOD_Tickle(  Objects_Id  id,  void       *ignored);/* *  TOD_MILLISECONDS_TO_MICROSECONDS * *  DESCRIPTION: * *  This routine converts an interval expressed in milliseconds to microseconds. * *  NOTE: * *  This must be a macro so it can be used in "static" tables. */#define TOD_MILLISECONDS_TO_MICROSECONDS(_ms) ((_ms) * 1000)/* *  TOD_MICROSECONDS_TO_TICKS * *  DESCRIPTION: * *  This routine converts an interval expressed in microseconds to ticks. * *  NOTE: * *  This must be a macro so it can be used in "static" tables. */#define TOD_MICROSECONDS_TO_TICKS(_us) \    ((_us) / _TOD_Microseconds_per_tick)/* *  TOD_MILLISECONDS_TO_TICKS * *  DESCRIPTION: * *  This routine converts an interval expressed in milliseconds to ticks. * *  NOTE: * *  This must be a macro so it can be used in "static" tables. */#define TOD_MILLISECONDS_TO_TICKS(_ms) \    (TOD_MILLISECONDS_TO_MICROSECONDS(_ms) / _TOD_Microseconds_per_tick)#ifndef __RTEMS_APPLICATION__#include <rtems/score/tod.inl>#endif#ifdef __cplusplus}#endif#endif/* end of include file */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -