diff --git a/kal/cmsis/cmsis_liteos2.c b/kal/cmsis/cmsis_liteos2.c index 9d6cb289..9aa795b6 100644 --- a/kal/cmsis/cmsis_liteos2.c +++ b/kal/cmsis/cmsis_liteos2.c @@ -639,7 +639,7 @@ osStatus_t osDelay(uint32_t ticks) return osOK; } if (osKernelGetState() != osKernelRunning) { - LOS_SysDelay(ticks); + LOS_UDelay(ticks * OS_US_PER_TICK); } else { uwRet = LOS_TaskDelay(ticks); } diff --git a/kernel/arch/include/los_timer.h b/kernel/arch/include/los_timer.h index bc09a703..498f02c4 100644 --- a/kernel/arch/include/los_timer.h +++ b/kernel/arch/include/los_timer.h @@ -67,9 +67,7 @@ VOID HalClearSysSleepFlag(VOID); VOID HalEnterSleep(LOS_SysSleepEnum sleep); -VOID HalDelay(UINT32 ticks); - - /** +/** * @ingroup los_timer * @brief Get systick cycle. * diff --git a/kernel/include/los_task.h b/kernel/include/los_task.h index 7bd594dd..d1288f5a 100644 --- a/kernel/include/los_task.h +++ b/kernel/include/los_task.h @@ -1098,14 +1098,14 @@ extern CHAR* LOS_TaskNameGet(UINT32 taskID); * @attention: * * - * @param ticks [IN] delay times. + * @param UINT64 [IN] delay times, microseconds. * * @retval: None. * @par Dependency: * * @see None. */ -extern VOID LOS_SysDelay(UINT32 ticks); +extern VOID LOS_UDelay(UINT64 microseconds); /** * @ingroup los_cpup diff --git a/kernel/src/los_task.c b/kernel/src/los_task.c index c860f3c3..89561b0a 100644 --- a/kernel/src/los_task.c +++ b/kernel/src/los_task.c @@ -1296,15 +1296,17 @@ LITE_OS_SEC_TEXT_MINOR VOID LOS_Msleep(UINT32 mSecs) (VOID)LOS_TaskDelay(interval); } -VOID LOS_SysDelay(UINT32 ticks) +VOID LOS_UDelay(UINT64 microseconds) { UINT64 endTime; - if (ticks == 0) { + if (microseconds == 0) { return; } - endTime = LOS_SysCycleGet() + ticks * OS_CYCLE_PER_TICK; + endTime = (microseconds / OS_SYS_US_PER_SECOND) * OS_SYS_CLOCK + + (microseconds % OS_SYS_US_PER_SECOND) * OS_SYS_CLOCK / OS_SYS_US_PER_SECOND; + endTime = LOS_SysCycleGet() + endTime; while (LOS_SysCycleGet() < endTime) { }