mirror of https://github.com/RT-Thread/rt-thread
[rt-smart]同步 gitee nanosleep 修复 (#6710)
This commit is contained in:
parent
50d5046f13
commit
2e488e0440
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2022-12-8 zhkag first version
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: DO NOT include this file on the header file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LOG_TAG
|
||||||
|
#define DBG_TAG "drv"
|
||||||
|
#else
|
||||||
|
#define DBG_TAG LOG_TAG
|
||||||
|
#endif /* LOG_TAG */
|
||||||
|
|
||||||
|
#ifdef DRV_DEBUG
|
||||||
|
#define DBG_LVL DBG_LOG
|
||||||
|
#else
|
||||||
|
#define DBG_LVL DBG_INFO
|
||||||
|
#endif /* DRV_DEBUG */
|
||||||
|
|
||||||
|
#include <rtdbg.h>
|
|
@ -727,7 +727,7 @@ int clock_nanosleep(clockid_t clockid, int flags, const struct timespec *rqtp, s
|
||||||
case CLOCK_REALTIME:
|
case CLOCK_REALTIME:
|
||||||
{
|
{
|
||||||
rt_tick_t tick, tick_old = rt_tick_get();
|
rt_tick_t tick, tick_old = rt_tick_get();
|
||||||
if (flags & TIMER_ABSTIME == TIMER_ABSTIME)
|
if ((flags & TIMER_ABSTIME) == TIMER_ABSTIME)
|
||||||
{
|
{
|
||||||
tick = (rqtp->tv_sec - _timevalue.tv_sec) * RT_TICK_PER_SECOND + (rqtp->tv_nsec - _timevalue.tv_usec) * (RT_TICK_PER_SECOND / NANOSECOND_PER_SECOND);
|
tick = (rqtp->tv_sec - _timevalue.tv_sec) * RT_TICK_PER_SECOND + (rqtp->tv_nsec - _timevalue.tv_usec) * (RT_TICK_PER_SECOND / NANOSECOND_PER_SECOND);
|
||||||
rt_tick_t rt_tick = rt_tick_get();
|
rt_tick_t rt_tick = rt_tick_get();
|
||||||
|
@ -763,7 +763,7 @@ int clock_nanosleep(clockid_t clockid, int flags, const struct timespec *rqtp, s
|
||||||
float unit = clock_cpu_getres();
|
float unit = clock_cpu_getres();
|
||||||
|
|
||||||
cpu_tick = (rqtp->tv_sec * NANOSECOND_PER_SECOND + rqtp->tv_nsec * (NANOSECOND_PER_SECOND / NANOSECOND_PER_SECOND)) / unit;
|
cpu_tick = (rqtp->tv_sec * NANOSECOND_PER_SECOND + rqtp->tv_nsec * (NANOSECOND_PER_SECOND / NANOSECOND_PER_SECOND)) / unit;
|
||||||
if (flags & TIMER_ABSTIME == TIMER_ABSTIME)
|
if ((flags & TIMER_ABSTIME) == TIMER_ABSTIME)
|
||||||
cpu_tick = cpu_tick < cpu_tick_old ? 0 : cpu_tick - cpu_tick_old;
|
cpu_tick = cpu_tick < cpu_tick_old ? 0 : cpu_tick - cpu_tick_old;
|
||||||
tick = (unit * cpu_tick) / (NANOSECOND_PER_SECOND / RT_TICK_PER_SECOND);
|
tick = (unit * cpu_tick) / (NANOSECOND_PER_SECOND / RT_TICK_PER_SECOND);
|
||||||
rt_thread_delay(tick);
|
rt_thread_delay(tick);
|
||||||
|
@ -1007,7 +1007,6 @@ RTM_EXPORT(timer_delete);
|
||||||
**/
|
**/
|
||||||
int timer_getoverrun(timer_t timerid)
|
int timer_getoverrun(timer_t timerid)
|
||||||
{
|
{
|
||||||
struct timer_obj *timer = (struct timer_obj *)((uintptr_t)timerid << 1);
|
|
||||||
rt_set_errno(ENOSYS);
|
rt_set_errno(ENOSYS);
|
||||||
return -RT_ERROR;
|
return -RT_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -1125,7 +1124,7 @@ int timer_settime(timer_t timerid, int flags, const struct itimerspec *value,
|
||||||
* RT_TICK_PER_SECOND NANOSECOND_PER_SECOND NANOSECOND_PER_SECOND
|
* RT_TICK_PER_SECOND NANOSECOND_PER_SECOND NANOSECOND_PER_SECOND
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if (flags & TIMER_ABSTIME == TIMER_ABSTIME)
|
if ((flags & TIMER_ABSTIME) == TIMER_ABSTIME)
|
||||||
{
|
{
|
||||||
#ifndef RT_USING_RTC
|
#ifndef RT_USING_RTC
|
||||||
LOG_W(_WARNING_NO_RTC);
|
LOG_W(_WARNING_NO_RTC);
|
||||||
|
|
|
@ -929,7 +929,8 @@ int sys_nanosleep(const struct timespec *rqtp, struct timespec *rmtp)
|
||||||
if ((ret != -1 || rt_get_errno() == EINTR) && rmtp && lwp_user_accessable((void *)rmtp, sizeof *rmtp))
|
if ((ret != -1 || rt_get_errno() == EINTR) && rmtp && lwp_user_accessable((void *)rmtp, sizeof *rmtp))
|
||||||
{
|
{
|
||||||
lwp_put_to_user(rmtp, (void *)&rmtp_k, sizeof rmtp_k);
|
lwp_put_to_user(rmtp, (void *)&rmtp_k, sizeof rmtp_k);
|
||||||
return -EINTR;
|
if(ret != 0)
|
||||||
|
return -EINTR;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (rmtp)
|
if (rmtp)
|
||||||
|
@ -3878,7 +3879,8 @@ int sys_clock_nanosleep(clockid_t clk, int flags, const struct timespec *rqtp, s
|
||||||
if ((ret != -1 || rt_get_errno() == EINTR) && rmtp && lwp_user_accessable((void *)rmtp, sizeof *rmtp))
|
if ((ret != -1 || rt_get_errno() == EINTR) && rmtp && lwp_user_accessable((void *)rmtp, sizeof *rmtp))
|
||||||
{
|
{
|
||||||
lwp_put_to_user(rmtp, (void *)&rmtp_k, sizeof rmtp_k);
|
lwp_put_to_user(rmtp, (void *)&rmtp_k, sizeof rmtp_k);
|
||||||
return -EINTR;
|
if(ret != 0)
|
||||||
|
return -EINTR;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (rmtp)
|
if (rmtp)
|
||||||
|
|
Loading…
Reference in New Issue