os_ms_to_tick
所属模块:时间管理 | 类型:时间换算函数
函数简介
os_ms_to_tick 用于将毫秒时间转换为系统 Tick 数,用于任务延时和调度计算。
该函数会根据当前系统定时器计数值计算单个 Tick 的实际毫秒长度,从而完成动态换算。
函数原型
u16 os_ms_to_tick(u16 ms);
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : ms_to_tick.c
| - Author : 谭舒
| - Update date : 2026-09-19
| - Copyright(C) : 2026 HRTOS. All rights reserved.
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| INCLUDES |
------------------------------------------------------------------------*/
#include "hrtos_internal.h"
/*------------------------------------------------------------------------
| API FUNCTIONS |
------------------------------------------------------------------------*/
/**
* @brief 将毫秒时间转换为系统 Tick 数。
*
* @param[in] ms 待转换的时间,单位为毫秒。
*
* @return 对应的系统 Tick 数。
*
* @note 根据当前 Timer0 重载值计算单个系统 Tick 的时间长度,
* 并将输入的毫秒时间向上取整转换为对应的 Tick 数。
* 当单个 Tick 的时间小于 1 毫秒时,按 1 毫秒进行换算。
*/
u16 os_ms_to_tick(u16 ms) //输入毫秒数,返回时间片数;
{
u16 tick_time_us;
u16 tick_value;
u16 tick_ms;
tick_value =OS_T0_TH0;
tick_value =tick_value << 8;
tick_value +=OS_T0_TL0;
tick_time_us = 65536 - tick_value;
tick_ms = tick_time_us / 1000;
if(tick_ms == 0)
{
tick_ms = 1;
}
return (ms + tick_ms - 1) / tick_ms;
}
/*------------------------------------------------------------------------
| END OF FILE: ms_to_tick.c |
------------------------------------------------------------------------*/
使用示例
void delay_task()
{
u16 tick = os_ms_to_tick(100);
os_task_delay(tick);
}
注意事项
Tick 计算依赖定时器当前计数值,若系统时钟配置变化,该函数结果会相应变化。