Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
天中雨水
rt-thread
提交
3bf68f2f
R
rt-thread
项目概览
天中雨水
/
rt-thread
该项目与 Fork 源项目分叉
Fork自
RT-Thread / rt-thread
通知
2
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3bf68f2f
编写于
10月 26, 2018
作者:
Z
zylx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[Libc][dlib][armlibc] add gmtime_r api
上级
86ad6903
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
150 addition
and
63 deletion
+150
-63
components/libc/compilers/armlibc/sys/time.h
components/libc/compilers/armlibc/sys/time.h
+1
-0
components/libc/compilers/armlibc/time.c
components/libc/compilers/armlibc/time.c
+74
-0
components/libc/compilers/dlib/sys/time.h
components/libc/compilers/dlib/sys/time.h
+1
-0
components/libc/compilers/dlib/time.c
components/libc/compilers/dlib/time.c
+74
-0
include/rtthread.h
include/rtthread.h
+0
-1
src/kservice.c
src/kservice.c
+0
-62
未找到文件。
components/libc/compilers/armlibc/sys/time.h
浏览文件 @
3bf68f2f
...
...
@@ -45,6 +45,7 @@ struct timezone {
};
int
gettimeofday
(
struct
timeval
*
tp
,
void
*
ignore
);
struct
tm
*
gmtime_r
(
const
time_t
*
timep
,
struct
tm
*
r
);
#ifdef __cplusplus
}
...
...
components/libc/compilers/armlibc/time.c
浏览文件 @
3bf68f2f
...
...
@@ -9,6 +9,27 @@
#include <sys/time.h>
#include <rtthread.h>
/* days per month -- nonleap! */
const
short
__spm
[
13
]
=
{
0
,
(
31
),
(
31
+
28
),
(
31
+
28
+
31
),
(
31
+
28
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
+
30
+
31
),
};
/* seconds per day */
#define SPD 24*60*60
#ifdef RT_USING_DEVICE
int
gettimeofday
(
struct
timeval
*
tp
,
void
*
ignore
)
{
...
...
@@ -79,6 +100,59 @@ time_t time(time_t *t)
return
time_now
;
}
static
int
__isleap
(
int
year
)
{
/* every fourth year is a leap year except for century years that are
* not divisible by 400. */
/* return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); */
return
(
!
(
year
%
4
)
&&
((
year
%
100
)
||
!
(
year
%
400
)));
}
/**
* This function will convert Time (Restartable)
*
* @param timep the timestamp
* @param the structure to stores information
*
* @return the structure to stores information
*
*/
struct
tm
*
gmtime_r
(
const
time_t
*
timep
,
struct
tm
*
r
)
{
time_t
i
;
register
time_t
work
=
*
timep
%
(
SPD
);
r
->
tm_sec
=
work
%
60
;
work
/=
60
;
r
->
tm_min
=
work
%
60
;
r
->
tm_hour
=
work
/
60
;
work
=
*
timep
/
(
SPD
);
r
->
tm_wday
=
(
4
+
work
)
%
7
;
for
(
i
=
1970
;;
++
i
)
{
register
time_t
k
=
__isleap
(
i
)
?
366
:
365
;
if
(
work
>=
k
)
work
-=
k
;
else
break
;
}
r
->
tm_year
=
i
-
1900
;
r
->
tm_yday
=
work
;
r
->
tm_mday
=
1
;
if
(
__isleap
(
i
)
&&
(
work
>
58
))
{
if
(
work
==
59
)
r
->
tm_mday
=
2
;
/* 29.2. */
work
-=
1
;
}
for
(
i
=
11
;
i
&&
(
__spm
[
i
]
>
work
);
--
i
)
;
r
->
tm_mon
=
i
;
r
->
tm_mday
+=
work
-
__spm
[
i
];
return
r
;
}
RT_WEAK
clock_t
clock
(
void
)
{
return
rt_tick_get
();
...
...
components/libc/compilers/dlib/sys/time.h
浏览文件 @
3bf68f2f
...
...
@@ -52,6 +52,7 @@ struct timezone {
};
int
gettimeofday
(
struct
timeval
*
tp
,
void
*
ignore
);
struct
tm
*
gmtime_r
(
const
time_t
*
timep
,
struct
tm
*
r
);
#ifdef __cplusplus
}
...
...
components/libc/compilers/dlib/time.c
浏览文件 @
3bf68f2f
...
...
@@ -9,6 +9,27 @@
#include <sys/time.h>
#include <rtthread.h>
/* days per month -- nonleap! */
const
short
__spm
[
13
]
=
{
0
,
(
31
),
(
31
+
28
),
(
31
+
28
+
31
),
(
31
+
28
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
+
30
),
(
31
+
28
+
31
+
30
+
31
+
30
+
31
+
31
+
30
+
31
+
30
+
31
),
};
/* seconds per day */
#define SPD 24*60*60
#ifdef RT_USING_DEVICE
int
gettimeofday
(
struct
timeval
*
tp
,
void
*
ignore
)
{
...
...
@@ -78,6 +99,59 @@ __time32_t __time32(__time32_t *t)
return
time_now
;
}
static
int
__isleap
(
int
year
)
{
/* every fourth year is a leap year except for century years that are
* not divisible by 400. */
/* return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); */
return
(
!
(
year
%
4
)
&&
((
year
%
100
)
||
!
(
year
%
400
)));
}
/**
* This function will convert Time (Restartable)
*
* @param timep the timestamp
* @param the structure to stores information
*
* @return the structure to stores information
*
*/
struct
tm
*
gmtime_r
(
const
time_t
*
timep
,
struct
tm
*
r
)
{
time_t
i
;
register
time_t
work
=
*
timep
%
(
SPD
);
r
->
tm_sec
=
work
%
60
;
work
/=
60
;
r
->
tm_min
=
work
%
60
;
r
->
tm_hour
=
work
/
60
;
work
=
*
timep
/
(
SPD
);
r
->
tm_wday
=
(
4
+
work
)
%
7
;
for
(
i
=
1970
;;
++
i
)
{
register
time_t
k
=
__isleap
(
i
)
?
366
:
365
;
if
(
work
>=
k
)
work
-=
k
;
else
break
;
}
r
->
tm_year
=
i
-
1900
;
r
->
tm_yday
=
work
;
r
->
tm_mday
=
1
;
if
(
__isleap
(
i
)
&&
(
work
>
58
))
{
if
(
work
==
59
)
r
->
tm_mday
=
2
;
/* 29.2. */
work
-=
1
;
}
for
(
i
=
11
;
i
&&
(
__spm
[
i
]
>
work
);
--
i
)
;
r
->
tm_mon
=
i
;
r
->
tm_mday
+=
work
-
__spm
[
i
];
return
r
;
}
RT_WEAK
clock_t
clock
(
void
)
{
return
rt_tick_get
();
...
...
include/rtthread.h
浏览文件 @
3bf68f2f
...
...
@@ -473,7 +473,6 @@ rt_int32_t rt_vsprintf(char *dest, const char *format, va_list arg_ptr);
rt_int32_t
rt_vsnprintf
(
char
*
buf
,
rt_size_t
size
,
const
char
*
fmt
,
va_list
args
);
rt_int32_t
rt_sprintf
(
char
*
buf
,
const
char
*
format
,
...);
rt_int32_t
rt_snprintf
(
char
*
buf
,
rt_size_t
size
,
const
char
*
format
,
...);
struct
tm
*
rt_gmtime_r
(
const
time_t
*
timep
,
struct
tm
*
result
);
#if defined(RT_USING_DEVICE) && defined(RT_USING_CONSOLE)
rt_device_t
rt_console_set_device
(
const
char
*
name
);
...
...
src/kservice.c
浏览文件 @
3bf68f2f
...
...
@@ -1177,68 +1177,6 @@ void rt_kprintf(const char *fmt, ...)
RTM_EXPORT
(
rt_kprintf
);
#endif
/**
* This function will convert Time (Restartable)
*
* @param timep the timestamp
* @param result the structure to stores information
*/
struct
tm
*
rt_gmtime_r
(
const
time_t
*
timep
,
struct
tm
*
result
)
{
#define IS_LEAP_YEAR(year) (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
const
rt_uint32_t
mon_table
[
12
]
=
{
31
,
28
,
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
};
rt_uint32_t
year
=
1970
,
month
=
0
;
rt_uint32_t
daycount
=
0
,
second
=
0
,
number
=
0
;
second
=
*
timep
%
(
24
*
60
*
60
);
result
->
tm_hour
=
second
/
3600
;
result
->
tm_min
=
(
second
%
3600
)
/
60
;
result
->
tm_sec
=
(
second
%
3600
)
%
60
;
daycount
=
*
timep
/
(
24
*
60
*
60
);
result
->
tm_wday
=
(
daycount
+
4
)
%
7
;
if
(
daycount
!=
0
)
{
while
(
daycount
>=
365
)
{
number
=
IS_LEAP_YEAR
(
year
)
?
366
:
365
;
if
(
daycount
>=
number
)
{
daycount
-=
number
;
year
++
;
}
else
break
;
}
result
->
tm_year
=
year
-
1900
;
result
->
tm_yday
=
daycount
;
while
(
daycount
>=
28
)
{
if
(
month
==
1
&&
IS_LEAP_YEAR
(
year
))
{
if
(
daycount
>=
29
)
daycount
-=
29
;
else
break
;
}
else
{
if
(
daycount
>=
mon_table
[
month
])
daycount
-=
mon_table
[
month
];
else
break
;
}
month
++
;
}
result
->
tm_mon
=
month
;
result
->
tm_mday
=
daycount
+
1
;
}
return
result
;
}
RTM_EXPORT
(
rt_gmtime_r
);
#ifdef RT_USING_HEAP
/**
* This function allocates a memory block, which address is aligned to the
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录