Time
OS 定时器与时间管理。支持创建/启动/停止/修改/销毁软件定时器,回调在任务上下文中执行(非 ISR)。同时提供高精度定时器(hrtimer)和时间转换工具(ms↔jiffies 互转、sched_clock 纳秒级计时)。
定时器是一次性或周期性的,超时后自动触发回调。与硬件 Timer(ISR 上下文)不同,OS 定时器适合较长周期(≥ 1 个 tick)的定时任务。
头文件清单
接口清单
接口名称 功能简述 osal_timer_init 初始化定时器 osal_timer_start 启动定时器 osal_timer_mod 修改定时器超时时间 osal_timer_start_on 在指定CPU上启动定时器 osal_timer_stop 停止定时器 osal_timer_destroy 销毁定时器 osal_timer_get_private_data 获取定时器回调函数的私有数据 osal_timer_destroy_sync 同步销毁定时器并等待回调完成 osal_sched_clock 获取系统时间(纳秒) osal_get_jiffies 获取系统Tick/jiffies数 osal_msecs_to_jiffies 毫秒转换为Tick/jiffies osal_jiffies_to_msecs Tick/jiffies转换为毫秒 osal_get_cycle_per_tick 获取单个Tick对应的时钟周期数 osal_gettimeofday 获取当前系统内核时间 osal_hrtimer_create 创建高精度定时器 osal_hrtimer_start 启动高精度定时器 osal_hrtimer_destroy 销毁高精度定时器
Functions
osal_timer_init
头文件清单
功能说明
- 初始化定时器,创建内核定时器资源
- 调用前须对 timer->handler 和 timer->data 赋值,初始化后不可再修改
- timer->interval 指定定时器超时时间,单位为毫秒
前置条件
- timer 指针不为 NULL,且 timer->handler 不为 NULL
- timer->timer 须为 NULL(未初始化状态)
- timer->interval 对应的 Tick 数须大于 0
入参
名称 参数类型 详细说明 约束取值范围 timer osal_timer * 待初始化的定时器结构体指针 非NULL,timer->handler非NULL,timer->timer为NULL
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 初始化成功 定时器创建成功 OSAL_FAILURE(-1) 初始化失败 参数无效或内核定时器创建失败
参考案例
src/middleware/utils/dfx/log_file/log_file.c#logfile_timer_initsrc/drivers/chips/ws63/porting/xo_trim/xo_trim_porting.c
Kconfig配置
配置项 宏类型 说明 默认值 LOSCFG_COMPAT_LINUX_TIMER 功能宏 支持 OSAL Timer 接口功能 n
osal_timer_start
头文件清单
功能说明
- 启动已初始化的定时器
- 定时器超时后,内核将执行回调函数
- 若定时器已在运行,调用此接口将重新启动定时器
前置条件
- timer 指针不为 NULL
- 定时器已通过 osal_timer_init() 初始化成功
入参
名称 参数类型 详细说明 约束取值范围 timer osal_timer * 待启动的定时器结构体指针 非NULL,已初始化
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 启动成功 定时器启动成功 OSAL_FAILURE(-1) 启动失败 参数无效或内核定时器启动失败
参考案例
src/middleware/utils/dfx/log_file/log_file.c#logfile_timer_initsrc/drivers/chips/ws63/porting/xo_trim/xo_trim_porting.c
osal_timer_mod
头文件清单
功能说明
- 修改定时器超时时间,若定时器未激活则激活
- 修改后定时器将按新的超时时间重新启动
- 效率高于先停止再重新创建
前置条件
- timer 指针不为 NULL,且 timer->handler 不为 NULL
- interval 对应的 Tick 数须大于 0
入参
名称 参数类型 详细说明 约束取值范围 timer osal_timer * 待修改的定时器结构体指针 非NULL,timer->handler非NULL interval unsigned int 新的超时时间 单位:ms,对应Tick数须大于0
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 修改成功 定时器超时时间修改并重启成功 OSAL_FAILURE(-1) 修改失败 参数无效或内核操作失败
osal_timer_start_on
头文件清单
功能说明
- 在指定CPU上启动定时器
- 支持 SMP 场景下的定时器绑定
前置条件
- timer 指针不为 NULL
- 定时器已通过 osal_timer_init() 初始化成功
- 仅支持 Linux 系统
入参
名称 参数类型 详细说明 约束取值范围 timer osal_timer * 待启动的定时器结构体指针 非NULL,已初始化 delay unsigned long 延迟时间 - cpu int 目标CPU编号 -
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 启动成功 定时器在指定CPU上启动成功 OSAL_FAILURE(-1) 启动失败 启动失败
osal_timer_stop
头文件清单
功能说明
- 停止定时器,对活动和非活动定时器均有效
- 停止处于活动状态的定时器返回 1,停止已停止的定时器返回 0
前置条件
- timer 指针不为 NULL
- 定时器已通过 osal_timer_init() 初始化成功
入参
名称 参数类型 详细说明 约束取值范围 timer osal_timer * 待停止的定时器结构体指针 非NULL,已初始化
返回值
- 返回类型:int
返回值 文字含义 触发场景 1(1) 停止成功,定时器处于活动状态 定时器正在运行时被停止(仅 Linux 和 LiteOS 支持) OSAL_SUCCESS(0) 停止成功,定时器已停止 定时器已处于停止状态 OSAL_FAILURE(-1) 停止失败 内核定时器停止操作失败
osal_timer_destroy
头文件清单
功能说明
- 销毁定时器,释放内核定时器资源
- 模块退出时必须调用此接口释放定时器,否则将导致内存泄漏
前置条件
- timer 指针不为 NULL
- 定时器已通过 osal_timer_init() 初始化成功
入参
名称 参数类型 详细说明 约束取值范围 timer osal_timer * 待销毁的定时器结构体指针 非NULL,已初始化
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 销毁成功 定时器销毁成功 OSAL_FAILURE(-1) 销毁失败 参数无效或内核定时器删除失败
osal_timer_get_private_data
头文件清单
功能说明
- 在定时器回调函数中获取可用的私有数据参数
- 定时器回调函数的参数不能直接使用,需通过此接口转换后获取
- 将系统传入的回调参数转换为用户初始化时设置的 data 值
前置条件
- sys_data 为定时器回调函数的入参
入参
名称 参数类型 详细说明 约束取值范围 sys_data const void * 传递给回调函数的参数 非NULL
返回值
- 返回类型:unsigned long
返回可直接使用的私有数据参数值。
osal_timer_destroy_sync
头文件清单
功能说明
- 同步销毁定时器,停止定时器并等待回调函数执行完成
- 与 osal_timer_destroy 的区别在于 SMP 场景下可确保其他 CPU 上的回调已执行完毕
- 仅支持 Linux 系统
前置条件
- timer 指针不为 NULL
- 调用者须确保定时器不会被重新启动
- 不可在中断上下文中调用(irqsafe 定时器除外)
- 调用者不可持有阻止回调完成的锁
- 定时器回调不可调用 add_timer_on()
入参
名称 参数类型 详细说明 约束取值范围 timer osal_timer * 待同步销毁的定时器结构体指针 非NULL
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 销毁成功 定时器同步销毁成功 OSAL_FAILURE(-1) 销毁失败 销毁失败
osal_sched_clock
头文件清单
功能说明
- 获取系统时间,单位为纳秒
- 仅支持 Linux 和 LiteOS 系统
前置条件
- 无
返回值
- 返回类型:unsigned long long
返回当前系统时间(纳秒)。
osal_get_jiffies
头文件清单
功能说明
- 获取系统 Tick 数(LiteOS)或 jiffies 数(Linux)
- 支持 Linux、LiteOS、FreeRTOS 系统
前置条件
- 无
返回值
- 返回类型:unsigned long long
返回系统 Tick/jiffies 数。
osal_msecs_to_jiffies
头文件清单
功能说明
- 将毫秒时间转换为 Tick/jiffies 数
- 支持 Linux、LiteOS、FreeRTOS 系统
前置条件
- 无
入参
名称 参数类型 详细说明 约束取值范围 m const unsigned int 待转换的毫秒时间 单位:ms
返回值
- 返回类型:unsigned long
返回转换后的 Tick/jiffies 数。
osal_jiffies_to_msecs
头文件清单
功能说明
- 将 Tick/jiffies 数转换为毫秒时间
- 若转换结果超过 0xFFFFFFFF,返回 0xFFFFFFFF
- 支持 Linux、LiteOS、FreeRTOS 系统
前置条件
- 无
入参
名称 参数类型 详细说明 约束取值范围 n const unsigned int 待转换的 Tick/jiffies 数 -
返回值
- 返回类型:unsigned int
返回转换后的毫秒时间,若超过 0xFFFFFFFF 则返回 0xFFFFFFFF。
osal_get_cycle_per_tick
头文件清单
功能说明
- 获取单个 Tick 对应的时钟周期数
- 仅支持 LiteOS 系统
前置条件
- 无
返回值
- 返回类型:unsigned int
返回单个 Tick 对应的时钟周期数。
osal_gettimeofday
头文件清单
功能说明
- 获取当前系统内核时间
- 支持 Linux、LiteOS、FreeRTOS 系统
前置条件
- tv 指针不为 NULL
入参
名称 参数类型 详细说明 约束取值范围 tv osal_timeval * 输出时间结构体指针 非NULL
出参
名称 数据类型 输出说明 tv osal_timeval * 当前系统内核时间,包含秒和微秒
参考案例
src/middleware/services/wifi_service/service/soc_wifi_service_api.c
osal_hrtimer_create
头文件清单
功能说明
- 创建高精度定时器并初始化定时器参数
- 调用前须对 hrtimer->handler 和 hrtimer->interval 赋值,创建后不可再修改
- 模块退出时必须调用 osal_hrtimer_destroy 释放定时器,否则将导致内存泄漏
- 仅支持 LiteOS 系统
前置条件
- hrtimer 指针不为 NULL,且 hrtimer->timer 须为 NULL
- hrtimer->handler 已赋值
- hrtimer->interval 不得超过 ULONG_MAX / 1000
入参
名称 参数类型 详细说明 约束取值范围 hrtimer osal_hrtimer * 待创建的高精度定时器结构体指针 非NULL,hrtimer->timer为NULL,hrtimer->handler非NULL
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 创建成功 高精度定时器创建成功 OSAL_FAILURE(-1) 创建失败 参数无效或内核定时器创建失败
Kconfig配置
配置项 宏类型 说明 默认值 LOSCFG_COMPAT_LINUX_HRTIMER 功能宏 支持 OSAL HRTimer 接口功能 n
osal_hrtimer_start
头文件清单
功能说明
- 启动高精度定时器,将定时器节点加入全局链表并开始计时
- 仅支持 LiteOS 系统
前置条件
- hrtimer 指针不为 NULL,且 hrtimer->timer 不为 NULL
- 高精度定时器已通过 osal_hrtimer_create() 创建成功
- hrtimer->interval 不得超过 ULONG_MAX / 1000
入参
名称 参数类型 详细说明 约束取值范围 hrtimer osal_hrtimer * 待启动的高精度定时器结构体指针 非NULL,hrtimer->timer非NULL
返回值
- 返回类型:int
返回值 文字含义 触发场景 0(0) 启动成功 高精度定时器启动成功 -1(-1) 启动失败 高精度定时器启动失败 1(1) 定时器节点已在链表中 高精度定时器节点已存在于链表
Kconfig配置
配置项 宏类型 说明 默认值 LOSCFG_COMPAT_LINUX_HRTIMER 功能宏 支持 OSAL HRTimer 接口功能 n
osal_hrtimer_destroy
头文件清单
功能说明
- 销毁高精度定时器,取消定时器并释放内存资源
- 若指针为 NULL 或定时器节点不存在,则销毁失败
- 仅支持 LiteOS 系统
前置条件
- hrtimer 指针不为 NULL,且 hrtimer->timer 不为 NULL
- 高精度定时器已通过 osal_hrtimer_create() 创建成功
入参
名称 参数类型 详细说明 约束取值范围 hrtimer osal_hrtimer * 待销毁的高精度定时器结构体指针 非NULL,hrtimer->timer非NULL
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 销毁成功 高精度定时器销毁成功 OSAL_FAILURE(-1) 销毁失败 参数无效
Kconfig配置
配置项 宏类型 说明 默认值 LOSCFG_COMPAT_LINUX_HRTIMER 功能宏 支持 OSAL HRTimer 接口功能 n
Enumerations
osal_hrtimer_restart
枚举成员 取值 描述 OSAL_HRTIMER_NORESTART 0 定时器不复位 OSAL_HRTIMER_RESTART 1 定时器须复位
Structures
osal_timer
typedef struct {
void *timer;
void (*handler)(unsigned long);
unsigned long data; // data for handler
unsigned int interval; // timer timing duration, unit: ms.
} osal_timer;
成员说明:
成员名称 数据类型 描述 timer void * 内核定时器句柄,初始化前须置 NULL handler void (*)(unsigned long) 定时器超时回调函数指针 data unsigned long 传递给回调函数的私有数据 interval unsigned int 定时器超时时间,单位:ms
osal_timeval
成员说明:
成员名称 数据类型 描述 tv_sec long 秒 tv_usec long 微秒
osal_rtc_time
typedef struct {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
} osal_rtc_time;
成员说明:
成员名称 数据类型 描述 tm_sec int 秒 tm_min int 分 tm_hour int 时 tm_mday int 月内日 tm_mon int 月 tm_year int 年 tm_wday int 周内日 tm_yday int 年内日 tm_isdst int 夏令时标志
osal_hrtimer
typedef struct osal_hrtimer {
void *timer;
osal_hrtimer_restart (*handler)(void *timer);
unsigned long interval; /* Unit ms */
} osal_hrtimer;
成员说明:
成员名称 数据类型 描述 timer void * 内核高精度定时器句柄,创建前须置 NULL handler osal_hrtimer_restart ()(void timer) 高精度定时器超时回调函数指针 interval unsigned long 定时器超时时间,单位:ms