os_sec_to_tick
所属模块:时间管理 | 类型:时间换算函数
函数简介
os_sec_to_tick 用于将秒转换为系统 Tick 数。
该函数基于当前定时器计数值计算单个 Tick 的实际毫秒长度,从而推导出 1 秒对应的 Tick 数。
常用于长时间延时与周期任务调度。
函数原型
u16 os_sec_to_tick(u8 sec);
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : sec_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] sec 待转换的时间,单位为秒。
*
* @return 对应的系统 Tick 数。
*
* @note 根据当前 Timer0 重载值计算系统 Tick 周期,
* 并根据每秒对应的 Tick 数将输入的秒数转换为 Tick 数。
* 当单个 Tick 的时间小于 1 毫秒时,按 1 毫秒进行换算。
*/
u16 os_sec_to_tick(u8 sec) //输入秒数,返回时间片数;
{
u16 tick_value;
u16 tick_ms;
u16 tick_per_sec;
tick_value = OS_T0_TH0;
tick_value <<= 8;
tick_value += OS_T0_TL0;
tick_ms = (65536 - tick_value) / 1000;
if(tick_ms == 0)
{
tick_ms = 1;
}
tick_per_sec = 1000 / tick_ms;//1秒=1000毫秒
return tick_per_sec * sec;
}
/*------------------------------------------------------------------------
| END OF FILE: sec_to_tick.c |
------------------------------------------------------------------------*/
使用示例
void task_demo()
{
u16 tick = os_sec_to_tick(2);
os_task_delay(tick);
}
注意事项
转换结果依赖系统 Tick 精度,若定时器配置变化,结果会相应变化。