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

📄 wallclock.inl

📁 eCos操作系统源码
💻 INL
字号:
#ifndef CYGONCE_IO_WALLCLOCK_INL#define CYGONCE_IO_WALLCLOCK_INL//==========================================================================////      wallclock.inl////      Wallclock internal helper functions////==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================//#####DESCRIPTIONBEGIN####//// Author(s):     jskov// Contributors:  jskov// Date:          2000-05-26// Purpose:       Wall Clock internal helper functions////####DESCRIPTIONEND####////==========================================================================#include <cyg/infra/cyg_type.h>#include <cyg/infra/cyg_ass.h>          // assertions// -------------------------------------------------------------------------// Some helper functions#define is_leap(_y_) (((0==(_y_)%4 && 0!=(_y_)%100) || 0==(_y_)%400) ? 1 : 0)#define year_days(_y_) (is_leap(_y_) ? 366 : 365)static cyg_int32 days_per_month[2][12] = {    {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},    {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};#ifndef time_t#define time_t cyg_uint32#endifstatic time_t_simple_mktime(cyg_uint32 year, cyg_uint32 mon,               cyg_uint32 day, cyg_uint32 hour,               cyg_uint32 min, cyg_uint32 sec){    time_t secs;    cyg_uint32 y, m, days;    CYG_ASSERT(year <= 3124, "Year is unreasonably large");    CYG_ASSERT(mon <= 12, "Month is invalid");    CYG_ASSERT(day <= 31, "Day is invalid");    CYG_ASSERT(hour <= 23, "Hour is invalid");    CYG_ASSERT(min <= 59, "Minutes is invalid");    CYG_ASSERT(sec <= 61, "Seconds is invalid");    // Number of days due to years    days = 0;    for (y = 1970; y < year; y++)        days += year_days(y);    // Due to months    for (m = 0; m < mon-1; m++)        days += days_per_month[is_leap(year)][m];    // Add days    days += day - 1;    // Add hours, minutes, and seconds    secs = ((days * 24 + hour) * 60 + min) * 60 + sec;    return secs;}#ifdef CYGSEM_WALLCLOCK_SET_GET_MODEstatic void_simple_mkdate(time_t time,               cyg_uint32* year, cyg_uint32* mon,               cyg_uint32* day, cyg_uint32* hour,               cyg_uint32* min, cyg_uint32* sec){    cyg_int32 days, hms, y, m, *dpm;    days = (cyg_int32) (time / (24*60*60));    hms  = (cyg_int32) (time % (24*60*60));    // Nothing fancy about the time - no leap year magic involved    *sec = hms % 60;    *min = (hms % (60*60)) / 60;    *hour = hms / (60*60);    // Find year    for (y = 1970; days >= year_days(y); y++)        days -= year_days(y);    *year = y;    dpm = &days_per_month[is_leap(y)][0];    // Find month    for (m = 0; days >= dpm[m]; m++)        days -= dpm[m];    m++;    *mon = m;    *day = days+1;}#endif//-----------------------------------------------------------------------------// BCD helper macros#define TO_BCD(x) ((((x)/10)<<4) | ((x)%10))#define TO_DEC(x) ((((x)>>4)*10) + ((x)&0xf))#endif // ifndef CYGONCE_DEVS_WALLCLOCK_INL// EOF wallclock.inl

⌨️ 快捷键说明

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