os_ms_to_tick

所属模块:时间管理 | 类型:时间换算函数

API Metadata

函数ID:os_ms_to_tick
模块:time
类型:ms to tick conversion
嵌套深度:1

函数简介

os_ms_to_tick 用于将毫秒时间转换为系统 Tick 数,用于任务延时和调度计算。

该函数会根据当前系统定时器计数值计算单个 Tick 的实际毫秒长度,从而完成动态换算。

函数原型

u16 os_ms_to_tick(u16 ms);

参数说明

参数 说明
ms 输入的毫秒时间

返回值

返回对应的 Tick 数(向上取整)。

源码实现

/*------------------------------------------------------------------------ | 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 计算依赖定时器当前计数值,若系统时钟配置变化,该函数结果会相应变化。

相关推荐