os_sec_to_tick

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

API Metadata

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

函数简介

os_sec_to_tick 用于将秒转换为系统 Tick 数。

该函数基于当前定时器计数值计算单个 Tick 的实际毫秒长度,从而推导出 1 秒对应的 Tick 数。

常用于长时间延时与周期任务调度。

函数原型

u16 os_sec_to_tick(u8 sec);

参数说明

参数 说明
sec 输入的秒数

返回值

返回对应的 Tick 数。

源码实现

/*------------------------------------------------------------------------ | 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 精度,若定时器配置变化,结果会相应变化。

相关推荐