fix: 修改DoNanoSleep 以纳秒为单位

DoNanoSleep 接口以微秒为单位,纳秒级别的在转换成微秒时被整除为0,
导致转换成tick时为0,导致延时时触发yield,导致延时时间超大
Close #I3Z9DP

Signed-off-by: zhushengle <zhushengle@huawei.com>
Change-Id: Ib662fdc80707be6040b2bb06a1b457344bd48b30
This commit is contained in:
zhushengle
2021-08-06 17:49:31 +08:00
parent 9ec208a273
commit 6917e08431
5 changed files with 36 additions and 15 deletions

View File

@@ -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;
}
LITE_OS_SEC_TEXT_MINOR UINT32 OsUS2Tick(UINT64 microsec)
LITE_OS_SEC_TEXT_MINOR UINT32 OsNS2Tick(UINT64 nanoseconds)
{
const UINT32 usPerTick = OS_SYS_US_PER_SECOND / LOSCFG_BASE_CORE_TICK_PER_SECOND;
const UINT32 nsPerTick = OS_SYS_NS_PER_SECOND / LOSCFG_BASE_CORE_TICK_PER_SECOND;
UINT64 ticks = (microsec + usPerTick - 1) / usPerTick;
UINT64 ticks = (nanoseconds + nsPerTick - 1) / nsPerTick;
if (ticks > OS_MAX_VALUE) {
ticks = OS_MAX_VALUE;
}

View File

@@ -121,9 +121,9 @@ extern "C" {
/**
* @ingroup los_sys
* Convert microseconds to Ticks.
* Convert nanoseconds to Ticks.
*/
extern UINT32 OsUS2Tick(UINT64 microsec);
extern UINT32 OsNS2Tick(UINT64 nanoseconds);
#ifdef __cplusplus
#if __cplusplus

View File

@@ -647,7 +647,7 @@ INT32 OsFutexWait(const UINT32 *userVaddr, UINT32 flags, UINT32 val, UINT32 absT
return ret;
}
if (absTime != LOS_WAIT_FOREVER) {
timeOut = OsUS2Tick(absTime);
timeOut = OsNS2Tick((UINT64)absTime * OS_SYS_NS_PER_US);
}
return OsFutexWaitTask(userVaddr, flags, val, timeOut);