@ -29,44 +29,76 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
* 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_sys_pri.h"
# include "los_sched_pri.h"
# include "los_sched_pri.h"
// 定义最大值
# define OS_MAX_VALUE 0xFFFFFFFFUL
# define OS_MAX_VALUE 0xFFFFFFFFUL
// 获取当前的系统节拍数
LITE_OS_SEC_TEXT_MINOR UINT64 LOS_TickCountGet ( VOID )
LITE_OS_SEC_TEXT_MINOR UINT64 LOS_TickCountGet ( VOID )
{
{
// 调用内部函数获取当前调度时间周期并除以每个节拍的周期数,得到节拍数
return OsGetCurrSchedTimeCycle ( ) / OS_CYCLE_PER_TICK ;
return OsGetCurrSchedTimeCycle ( ) / OS_CYCLE_PER_TICK ;
}
}
// 获取每个节拍的周期数
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_CyclePerTickGet ( VOID )
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_CyclePerTickGet ( VOID )
{
{
// 返回系统时钟频率除以每秒节拍数,得到每个节拍的周期数
return g_sysClock / LOSCFG_BASE_CORE_TICK_PER_SECOND ;
return g_sysClock / LOSCFG_BASE_CORE_TICK_PER_SECOND ;
}
}
// 将毫秒转换为节拍数
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MS2Tick ( UINT32 millisec )
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_MS2Tick ( UINT32 millisec )
{
{
// 如果毫秒数等于最大值,直接返回最大值
if ( millisec = = OS_MAX_VALUE ) {
if ( millisec = = OS_MAX_VALUE ) {
return OS_MAX_VALUE ;
return OS_MAX_VALUE ;
}
}
// 将毫秒数乘以每秒节拍数,再除以每秒毫秒数,得到节拍数
return ( ( UINT64 ) millisec * LOSCFG_BASE_CORE_TICK_PER_SECOND ) / OS_SYS_MS_PER_SECOND ;
return ( ( UINT64 ) millisec * LOSCFG_BASE_CORE_TICK_PER_SECOND ) / OS_SYS_MS_PER_SECOND ;
}
}
// 将节拍数转换为毫秒
LITE_OS_SEC_TEXT_MINOR UINT32 LOS_Tick2MS ( UINT32 tick )
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 OsNS2Tick ( UINT64 nanoseconds )
LITE_OS_SEC_TEXT_MINOR UINT32 OsNS2Tick ( UINT64 nanoseconds )
{
{
// 每个节拍的纳秒数
const UINT32 nsPerTick = OS_SYS_NS_PER_SECOND / LOSCFG_BASE_CORE_TICK_PER_SECOND ;
const UINT32 nsPerTick = OS_SYS_NS_PER_SECOND / LOSCFG_BASE_CORE_TICK_PER_SECOND ;
// 将纳秒数加上每个节拍的纳秒数减1, 再除以每个节拍的纳秒数, 得到节拍数
UINT64 ticks = ( nanoseconds + nsPerTick - 1 ) / nsPerTick ;
UINT64 ticks = ( nanoseconds + nsPerTick - 1 ) / nsPerTick ;
// 如果节拍数超过最大值,将其设置为最大值
if ( ticks > OS_MAX_VALUE ) {
if ( ticks > OS_MAX_VALUE ) {
ticks = OS_MAX_VALUE ;
ticks = OS_MAX_VALUE ;
}
}
// 将节拍数转换为32位整数并返回
return ( UINT32 ) ticks ;
return ( UINT32 ) ticks ;
}
}