Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Kernel Liteos A
提交
51da89a3
K
Kernel Liteos A
项目概览
OpenHarmony
/
Kernel Liteos A
9 个月 前同步成功
通知
450
Star
414
Fork
55
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel Liteos A
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
51da89a3
编写于
8月 10, 2021
作者:
O
openharmony_ci
提交者:
Gitee
8月 10, 2021
浏览文件
操作
浏览文件
下载
差异文件
!532 fix: 修改DoNanoSleep 以纳秒为单位
Merge pull request !532 from zhushengle/sleep
上级
cdf96fef
6917e084
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
36 addition
and
15 deletion
+36
-15
compat/posix/src/time.c
compat/posix/src/time.c
+7
-7
kernel/base/core/los_sys.c
kernel/base/core/los_sys.c
+3
-3
kernel/base/include/los_sys_pri.h
kernel/base/include/los_sys_pri.h
+2
-2
kernel/base/ipc/los_futex.c
kernel/base/ipc/los_futex.c
+1
-1
testsuites/unittest/time/clock/full/clock_test_010.cpp
testsuites/unittest/time/clock/full/clock_test_010.cpp
+23
-2
未找到文件。
compat/posix/src/time.c
浏览文件 @
51da89a3
...
@@ -964,11 +964,11 @@ int timer_getoverrun(timer_t timerID)
...
@@ -964,11 +964,11 @@ int timer_getoverrun(timer_t timerID)
return
(
overRun
>
DELAYTIMER_MAX
)
?
DELAYTIMER_MAX
:
overRun
;
return
(
overRun
>
DELAYTIMER_MAX
)
?
DELAYTIMER_MAX
:
overRun
;
}
}
STATIC
INT32
DoNanoSleep
(
UINT64
u
seconds
)
STATIC
INT32
DoNanoSleep
(
UINT64
nano
seconds
)
{
{
UINT32
ret
;
UINT32
ret
;
ret
=
LOS_TaskDelay
(
Os
US2Tick
(
u
seconds
));
ret
=
LOS_TaskDelay
(
Os
NS2Tick
(
nano
seconds
));
if
(
ret
==
LOS_OK
||
ret
==
LOS_ERRNO_TSK_YIELD_NOT_ENOUGH_TASK
)
{
if
(
ret
==
LOS_OK
||
ret
==
LOS_ERRNO_TSK_YIELD_NOT_ENOUGH_TASK
)
{
return
0
;
return
0
;
}
}
...
@@ -977,12 +977,12 @@ STATIC INT32 DoNanoSleep(UINT64 useconds)
...
@@ -977,12 +977,12 @@ STATIC INT32 DoNanoSleep(UINT64 useconds)
int
usleep
(
unsigned
useconds
)
int
usleep
(
unsigned
useconds
)
{
{
return
DoNanoSleep
((
UINT64
)
useconds
);
return
DoNanoSleep
((
UINT64
)
useconds
*
OS_SYS_NS_PER_US
);
}
}
int
nanosleep
(
const
struct
timespec
*
rqtp
,
struct
timespec
*
rmtp
)
int
nanosleep
(
const
struct
timespec
*
rqtp
,
struct
timespec
*
rmtp
)
{
{
UINT64
u
seconds
;
UINT64
nano
seconds
;
INT32
ret
=
-
1
;
INT32
ret
=
-
1
;
(
VOID
)
rmtp
;
(
VOID
)
rmtp
;
...
@@ -993,14 +993,14 @@ int nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
...
@@ -993,14 +993,14 @@ int nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
return
ret
;
return
ret
;
}
}
useconds
=
(
UINT64
)
rqtp
->
tv_sec
*
OS_SYS_US_PER_SECOND
+
rqtp
->
tv_nsec
/
OS_SYS_NS_PER_US
;
nanoseconds
=
(
UINT64
)
rqtp
->
tv_sec
*
OS_SYS_NS_PER_SECOND
+
rqtp
->
tv_nsec
;
return
DoNanoSleep
(
u
seconds
);
return
DoNanoSleep
(
nano
seconds
);
}
}
unsigned
int
sleep
(
unsigned
int
seconds
)
unsigned
int
sleep
(
unsigned
int
seconds
)
{
{
return
DoNanoSleep
((
UINT64
)
seconds
*
OS_SYS_
U
S_PER_SECOND
);
return
DoNanoSleep
((
UINT64
)
seconds
*
OS_SYS_
N
S_PER_SECOND
);
}
}
double
difftime
(
time_t
time2
,
time_t
time1
)
double
difftime
(
time_t
time2
,
time_t
time1
)
...
...
kernel/base/core/los_sys.c
浏览文件 @
51da89a3
...
@@ -59,11 +59,11 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_Tick2MS(UINT32 tick)
...
@@ -59,11 +59,11 @@ LITE_OS_SEC_TEXT_MINOR UINT32 LOS_Tick2MS(UINT32 tick)
return
((
UINT64
)
tick
*
OS_SYS_MS_PER_SECOND
)
/
LOSCFG_BASE_CORE_TICK_PER_SECOND
;
return
((
UINT64
)
tick
*
OS_SYS_MS_PER_SECOND
)
/
LOSCFG_BASE_CORE_TICK_PER_SECOND
;
}
}
LITE_OS_SEC_TEXT_MINOR
UINT32
Os
US2Tick
(
UINT64
microsec
)
LITE_OS_SEC_TEXT_MINOR
UINT32
Os
NS2Tick
(
UINT64
nanoseconds
)
{
{
const
UINT32
usPerTick
=
OS_SYS_U
S_PER_SECOND
/
LOSCFG_BASE_CORE_TICK_PER_SECOND
;
const
UINT32
nsPerTick
=
OS_SYS_N
S_PER_SECOND
/
LOSCFG_BASE_CORE_TICK_PER_SECOND
;
UINT64
ticks
=
(
microsec
+
usPerTick
-
1
)
/
u
sPerTick
;
UINT64
ticks
=
(
nanoseconds
+
nsPerTick
-
1
)
/
n
sPerTick
;
if
(
ticks
>
OS_MAX_VALUE
)
{
if
(
ticks
>
OS_MAX_VALUE
)
{
ticks
=
OS_MAX_VALUE
;
ticks
=
OS_MAX_VALUE
;
}
}
...
...
kernel/base/include/los_sys_pri.h
浏览文件 @
51da89a3
...
@@ -121,9 +121,9 @@ extern "C" {
...
@@ -121,9 +121,9 @@ extern "C" {
/**
/**
* @ingroup los_sys
* @ingroup los_sys
* Convert
micr
oseconds to Ticks.
* Convert
nan
oseconds to Ticks.
*/
*/
extern
UINT32
Os
US2Tick
(
UINT64
microsec
);
extern
UINT32
Os
NS2Tick
(
UINT64
nanoseconds
);
#ifdef __cplusplus
#ifdef __cplusplus
#if __cplusplus
#if __cplusplus
...
...
kernel/base/ipc/los_futex.c
浏览文件 @
51da89a3
...
@@ -647,7 +647,7 @@ INT32 OsFutexWait(const UINT32 *userVaddr, UINT32 flags, UINT32 val, UINT32 absT
...
@@ -647,7 +647,7 @@ INT32 OsFutexWait(const UINT32 *userVaddr, UINT32 flags, UINT32 val, UINT32 absT
return
ret
;
return
ret
;
}
}
if
(
absTime
!=
LOS_WAIT_FOREVER
)
{
if
(
absTime
!=
LOS_WAIT_FOREVER
)
{
timeOut
=
Os
US2Tick
(
absTime
);
timeOut
=
Os
NS2Tick
((
UINT64
)
absTime
*
OS_SYS_NS_PER_US
);
}
}
return
OsFutexWaitTask
(
userVaddr
,
flags
,
val
,
timeOut
);
return
OsFutexWaitTask
(
userVaddr
,
flags
,
val
,
timeOut
);
...
...
testsuites/unittest/time/clock/full/clock_test_010.cpp
浏览文件 @
51da89a3
...
@@ -64,12 +64,12 @@ static int SleepTest(int64_t expectTime)
...
@@ -64,12 +64,12 @@ static int SleepTest(int64_t expectTime)
LogPrintln
(
"slept time (expected --> actual): %"
PRId64
"ns --> %"
PRId64
"ns, delta: %"
PRId64
"ns
\n
"
,
expectTime
,
LogPrintln
(
"slept time (expected --> actual): %"
PRId64
"ns --> %"
PRId64
"ns, delta: %"
PRId64
"ns
\n
"
,
expectTime
,
escapeTime
,
escapeTime
-
expectTime
);
escapeTime
,
escapeTime
-
expectTime
);
g_failCnt
+=
(
escapeTime
<
expectTime
||
(
escapeTime
-
expectTime
)
>=
20000000
);
// 20000000, 2 ticks.
g_failCnt
+=
(
escapeTime
<
expectTime
);
return
0
;
return
0
;
}
}
static
int
ClockTest
(
void
)
static
void
*
ClockTestThread
(
void
*
arg
)
{
{
(
void
)
SleepTest
(
0
);
(
void
)
SleepTest
(
0
);
(
void
)
SleepTest
(
2
);
// 2, ns.
(
void
)
SleepTest
(
2
);
// 2, ns.
...
@@ -84,6 +84,27 @@ static int ClockTest(void)
...
@@ -84,6 +84,27 @@ static int ClockTest(void)
(
void
)
SleepTest
(
10e6
+
1
);
// 10ms+1ns
(
void
)
SleepTest
(
10e6
+
1
);
// 10ms+1ns
(
void
)
SleepTest
(
25e6
);
// 25ms
(
void
)
SleepTest
(
25e6
);
// 25ms
(
void
)
SleepTest
(
1e9
);
// 1s
(
void
)
SleepTest
(
1e9
);
// 1s
return
NULL
;
}
static
int
ClockTest
(
void
)
{
int
ret
;
pthread_t
thread
;
struct
sched_param
param
=
{
0
};
pthread_attr_t
attr
;
pthread_attr_init
(
&
attr
);
pthread_attr_setschedpolicy
(
&
attr
,
SCHED_FIFO
);
pthread_attr_setschedparam
(
&
attr
,
&
param
);
ret
=
pthread_create
(
&
thread
,
&
attr
,
ClockTestThread
,
NULL
);
ICUNIT_ASSERT_EQUAL
(
ret
,
0
,
ret
);
ret
=
pthread_join
(
thread
,
NULL
);
ICUNIT_ASSERT_EQUAL
(
ret
,
0
,
ret
);
ICUNIT_ASSERT_EQUAL
(
g_failCnt
,
0
,
g_failCnt
);
ICUNIT_ASSERT_EQUAL
(
g_failCnt
,
0
,
g_failCnt
);
return
0
;
return
0
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录