链接复制成功!
开发指导
使用场景
- 创建一个单次触发的定时器,超时后执行用户自定义的回调函数。
- 创建一个周期性触发的定时器,超时后执行用户自定义的回调函数。
功能
Huawei LiteOS的软件定时器模块为用户提供下面几种功能,接口详细信息可以查看API参考。
功能分类 |
接口名 |
描述 |
---|---|---|
创建/删除定时器 |
LOS_SwtmrCreate |
创建定时器,设置定时器的定时时长、定时器模式、回调函数,并返回定时器ID |
LOS_SwtmrDelete |
删除定时器 |
|
启动/停止定时器 |
LOS_SwtmrStart |
启动定时器 |
LOS_SwtmrStop |
停止定时器 |
|
获得软件定时器剩余Tick数 |
LOS_SwtmrTimeGet |
获得软件定时器剩余Tick数 |
软件定时器错误码
对存在失败可能性的操作返回对应的错误码,以便快速定位错误原因。
序号 |
定义 |
实际数值 |
描述 |
参考解决方案 |
---|---|---|---|---|
1 |
LOS_ERRNO_SWTMR_PTR_NULL |
0x02000300 |
软件定时器回调函数为空 |
定义软件定时器回调函数 |
2 |
LOS_ERRNO_SWTMR_INTERVAL_NOT_SUITED |
0x02000301 |
软件定时器的定时时长为0 |
重新定义定时器的定时时长 |
3 |
LOS_ERRNO_SWTMR_MODE_INVALID |
0x02000302 |
不正确的软件定时器模式 |
确认软件定时器模式,范围为[0,2] |
4 |
LOS_ERRNO_SWTMR_RET_PTR_NULL |
0x02000303 |
入参的软件定时器ID指针为NULL |
定义ID变量,传入有效指针 |
5 |
LOS_ERRNO_SWTMR_MAXSIZE |
0x02000304 |
软件定时器个数超过最大值 |
重新设置软件定时器最大个数,或者等待一个软件定时器释放资源 |
6 |
LOS_ERRNO_SWTMR_ID_INVALID |
0x02000305 |
入参的软件定时器ID不正确 |
确保入参合法 |
7 |
LOS_ERRNO_SWTMR_NOT_CREATED |
0x02000306 |
软件定时器未创建 |
创建软件定时器 |
8 |
LOS_ERRNO_SWTMR_NO_MEMORY |
0x02000307 |
初始化软件定时器模块时,内存不足 |
调整OS_SYS_MEM_SIZE,以确保有足够的内存供软件定时器使用 |
9 |
LOS_ERRNO_SWTMR_MAXSIZE_INVALID |
0x02000308 |
暂不使用该错误码 |
- |
10 |
LOS_ERRNO_SWTMR_HWI_ACTIVE |
0x02000309 |
在中断中使用定时器 |
修改源代码确保不在中断中使用 |
11 |
LOS_ERRNO_SWTMR_HANDLER_POOL_NO_MEM |
0x0200030a |
暂不使用该错误码 |
- |
12 |
LOS_ERRNO_SWTMR_QUEUE_CREATE_FAILED |
0x0200030b |
在软件定时器初始化时,创建定时器队列失败 |
调整OS_SYS_MEM_SIZE,以确保有足够的内存供软件定时器创建队列 |
13 |
LOS_ERRNO_SWTMR_TASK_CREATE_FAILED |
0x0200030c |
在软件定时器初始化时,创建定时器任务失败 |
调整OS_SYS_MEM_SIZE,以确保有足够的内存供软件定时器创建任务 |
14 |
LOS_ERRNO_SWTMR_NOT_STARTED |
0x0200030d |
未启动软件定时器 |
启动软件定时器 |
15 |
LOS_ERRNO_SWTMR_STATUS_INVALID |
0x0200030e |
不正确的软件定时器状态 |
检查确认软件定时器状态 |
16 |
LOS_ERRNO_SWTMR_SORTLIST_NULL |
0x0200030f |
暂不使用该错误码 |
- |
17 |
LOS_ERRNO_SWTMR_TICK_PTR_NULL |
0x02000310 |
用以获取软件定时器剩余Tick数的入参指针为NULL |
定义有效变量以传入有效指针 |
18 |
LOS_ERRNO_SWTMR_SORTLINK_CREATE_FAILED |
0x02000311 |
在软件定时器初始化时,创建定时器链表失败 |
调整OS_SYS_MEM_SIZE,以确保有足够的内存供软件定时器创建链表 |
错误码定义见错误码简介。8~15位的所属模块为软件定时器模块,值为0x03。
开发流程
软件定时器的典型开发流程:
- 执行make menuconfig命令,进入Kernel ---> Enable Software Timer菜单,完成软件定时器的配置。
配置项
含义
取值范围
默认值
依赖
LOSCFG_BASE_CORE_SWTMR
软件定时器裁剪开关
YES/NO
YES
LOSCFG_BASE_IPC_QUEUE
LOSCFG_BASE_CORE_SWTMR_LIMIT
最大支持的软件定时器数
<65535
1024
LOSCFG_BASE_CORE_SWTMR
LOSCFG_BASE_CORE_SWTMR_IN_ISR
在中断中直接执行回调函数
YES/NO
NO
LOSCFG_BASE_CORE_SWTMR
LOSCFG_BASE_CORE_TSK_SWTMR_STACK_SIZE
(菜单路径为:Kernel ---> Basic Config ---> Task)
软件定时器任务栈大小
[LOSCFG_TASK_MIN_STACK_SIZE, OS_SYS_MEM_SIZE)
24576
LOSCFG_BASE_CORE_SWTMR
- 创建定时器LOS_SwtmrCreate,设置定时器的定时时长、定时器模式、超时后的回调函数。
- 启动定时器LOS_SwtmrStart。
- 获得软件定时器剩余Tick数LOS_SwtmrTimeGet。
- 停止定时器LOS_SwtmrStop。
- 删除定时器LOS_SwtmrDelete。