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

📄 tod.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
字号:
/* *  Real Time Clock Driver Wrapper for Libchip * *  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.c,v 1.2.8.3 2004/11/10 22:38:38 joel Exp $ */ #include <rtems.h>#include <libchip/rtc.h>#include <tod.h>/* *  Configuration Information */extern unsigned long              RTC_Count;extern rtems_device_minor_number  RTC_Minor;int RTC_Present;/* *  rtc_initialize * *  Initialize the RTC driver */rtems_device_driver rtc_initialize(  rtems_device_major_number  major,  rtems_device_minor_number  minor_arg,  void                      *arg){  rtems_device_minor_number  minor;  rtems_status_code          status;  for (minor=0; minor < RTC_Count ; minor++) {    /*      * First perform the configuration dependent probe, then the     * device dependent probe     */    if (RTC_Table[minor].deviceProbe && RTC_Table[minor].deviceProbe(minor)) {      /*        * Use this device as the primary RTC       */      RTC_Minor = minor;      RTC_Present = 1;      break;    }  }  if ( !RTC_Present ) {    /*      * Failed to find an RTC -- this is not a fatal error.     */    return RTEMS_INVALID_NUMBER;  }  /*   *  Register and initialize the primary RTC's   */  status = rtems_io_register_name( "/dev/rtc", major, RTC_Minor );  if (status != RTEMS_SUCCESSFUL) {    rtems_fatal_error_occurred(status);  }  RTC_Table[minor].pDeviceFns->deviceInitialize( RTC_Minor );  /*   *  Now initialize any secondary RTC's    */  for ( minor++ ; minor<RTC_Count ; minor++) {    /*     * First perform the configuration dependent probe, then the     * device dependent probe     */    if (RTC_Table[minor].deviceProbe && RTC_Table[minor].deviceProbe(minor)) {      status = rtems_io_register_name(        RTC_Table[minor].sDeviceName,        major,        minor );      if (status != RTEMS_SUCCESSFUL) {        rtems_fatal_error_occurred(status);      }      /*       * Initialize the hardware device.       */      RTC_Table[minor].pDeviceFns->deviceInitialize(minor);    }  }  setRealTimeToRTEMS();  return RTEMS_SUCCESSFUL;}/*PAGE * *  This routine copies the time from the real time clock to RTEMS *  *  Input parameters:  NONE *  *  Output parameters:  NONE * *  Return values: NONE */void setRealTimeToRTEMS(){  rtems_time_of_day rtc_tod;  if (!RTC_Present)    return;  RTC_Table[RTC_Minor].pDeviceFns->deviceGetTime(RTC_Minor, &rtc_tod);  rtems_clock_set( &rtc_tod );}/*PAGE * *  setRealTimeFromRTEMS * *  This routine copies the time from RTEMS to the real time clock *  *  Input parameters:  NONE *  *  Output parameters:  NONE * *  Return values: NONE */void setRealTimeFromRTEMS(){  rtems_time_of_day rtems_tod;  if (!RTC_Present)    return;  rtems_clock_get( RTEMS_CLOCK_GET_TOD, &rtems_tod );  RTC_Table[RTC_Minor].pDeviceFns->deviceSetTime(RTC_Minor, &rtems_tod);}/*PAGE * *  getRealTime * *  This routine reads the current time from the RTC. *  *  Input parameters:  NONE *  *  Output parameters:  NONE * *  Return values: NONE */void getRealTime(  rtems_time_of_day *tod){  if (!RTC_Present)    return;  RTC_Table[RTC_Minor].pDeviceFns->deviceGetTime(RTC_Minor, tod);}/*PAGE *  *  setRealTime *   *  This routine sets the RTC. *   *  Input parameters:  NONE *  *  Output parameters:  NONE * *  Return values: NONE *//* XXX this routine should be part of the public RTEMS interface */ rtems_boolean _TOD_Validate( rtems_time_of_day *tod );int setRealTime(  rtems_time_of_day *tod){    if (!RTC_Present)    return -1;    if ( !_TOD_Validate(tod) )    return -1;  RTC_Table[RTC_Minor].pDeviceFns->deviceSetTime(RTC_Minor, tod);  return 0;}/*PAGE * *  checkRealTime * *  This routine reads the returns the variance betweent the real time and *  rtems time. *  *  Input parameters: NONE *  *  Output parameters:  NONE * *  Return values:  *    int   The differance between the real time clock and rtems time. *//* XXX this routine should be part of the public RTEMS interface */ unsigned32 _TOD_To_seconds( rtems_time_of_day *tod );int checkRealTime(){  rtems_time_of_day rtems_tod;  rtems_time_of_day rtc_tod;  unsigned32 rtems_time;  unsigned32 rtc_time;  if (!RTC_Present)    return -1;  rtems_clock_get( RTEMS_CLOCK_GET_TOD, &rtems_tod );  RTC_Table[RTC_Minor].pDeviceFns->deviceGetTime(RTC_Minor, &rtc_tod);  rtems_time = _TOD_To_seconds( &rtems_tod );   rtc_time = _TOD_To_seconds( &rtc_tod );   return rtems_time - rtc_time;}

⌨️ 快捷键说明

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