You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
LOS_TickCountGet()获取当前的系统节拍数。通过调用OsGetCurrSchedTimeCycle()函数获取当前调度时间周期,并将其除以每个节拍的周期数,得到节拍数。
LOS_CyclePerTickGet():获取每个节拍的周期数。通过将系统时钟频率除以每秒节拍数,得到每个节拍的周期数。
LOS_MS2Tick():将毫秒转换为节拍数。将给定的毫秒数乘以每秒节拍数,再除以每秒毫秒数,得到节拍数。
LOS_Tick2MS():将节拍数转换为毫秒。将给定的节拍数乘以每秒毫秒数,再除以每秒节拍数,得到毫秒数。
OsNS2Tick()将纳秒转换为节拍数。首先计算每个节拍的纳秒数然后将给定的纳秒数加上每个节拍的纳秒数减1再除以每个节拍的纳秒数得到节拍数。如果节拍数超过最大值则将其设置为最大值。
*/
#include "los_sys_pri.h"
#include "los_sched_pri.h"
// 定义最大值
#define OS_MAX_VALUE 0xFFFFFFFFUL
// 获取当前的系统节拍数
LITE_OS_SEC_TEXT_MINOR UINT64 LOS_TickCountGet(VOID)
{
// 调用内部函数获取当前调度时间周期并除以每个节拍的周期数,得到节拍数
return OsGetCurrSchedTimeCycle() / OS_CYCLE_PER_TICK;
}
// 获取每个节拍的周期数
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_CyclePerTickGet(VOID)
{
// 返回系统时钟频率除以每秒节拍数,得到每个节拍的周期数
return g_sysClock / LOSCFG_BASE_CORE_TICK_PER_SECOND;
}
// 将毫秒转换为节拍数
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MS2Tick(UINT32 millisec)
{
// 如果毫秒数等于最大值,直接返回最大值
if (millisec == OS_MAX_VALUE) {
return OS_MAX_VALUE;
}
// 将毫秒数乘以每秒节拍数,再除以每秒毫秒数,得到节拍数
return ((UINT64)millisec * LOSCFG_BASE_CORE_TICK_PER_SECOND) / OS_SYS_MS_PER_SECOND;
}
// 将节拍数转换为毫秒
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 OsNS2Tick(UINT64 nanoseconds)
{
// 每个节拍的纳秒数
const UINT32 nsPerTick = OS_SYS_NS_PER_SECOND / LOSCFG_BASE_CORE_TICK_PER_SECOND;
// 将纳秒数加上每个节拍的纳秒数减1再除以每个节拍的纳秒数得到节拍数
UINT64 ticks = (nanoseconds + nsPerTick - 1) / nsPerTick;
// 如果节拍数超过最大值,将其设置为最大值
if (ticks > OS_MAX_VALUE) {
ticks = OS_MAX_VALUE;
}
// 将节拍数转换为32位整数并返回
return (UINT32)ticks;
}