文档首页 > > 开发指南> 内核开发指南> 软件定时器> 开发指导

开发指导

分享
更新时间:2020/06/24 GMT+08:00

使用场景

  • 创建一个单次触发的定时器,超时后执行用户自定义的回调函数。
  • 创建一个周期性触发的定时器,超时后执行用户自定义的回调函数。

功能

Huawei LiteOS系统中的软件定时器模块为用户提供下面几种功能,下面具体的API详见软件定时器对外接口手册。

表1

功能分类

接口名

描述

创建、删除定时器

LOS_SwtmrCreate

创建定时器

LOS_SwtmrDelete

删除定时器

启动、停止定时器

LOS_SwtmrStart

启动定时器

LOS_SwtmrStop

停止定时器

获得软件定时器剩余Tick数

LOS_SwtmrTimeGet

获得软件定时器剩余Tick数

开发流程

软件定时器的典型开发流程:

  1. 配置软件定时器。
    • 确认配置项LOSCFG_BASE_CORE_SWTMR和LOSCFG_BASE_IPC_QUEUE为YES打开状态
    • 配置LOSCFG_BASE_CORE_SWTMR_LIMIT最大支持的软件定时器数
    • 配置OS_SWTMR_HANDLE_QUEUE_SIZE软件定时器队列最大长度
  2. 创建定时器LOS_SwtmrCreate。
    • 创建一个指定计时时长、指定超时处理函数、指定触发模式的软件定时器
    • 返回函数运行结果,成功或失败
  3. 启动定时器LOS_SwtmrStart。
  4. 获得软件定时器剩余Tick数LOS_SwtmrTimeGet。
  5. 停止定时器LOS_SwtmrStop。
  6. 删除定时器LOS_SwtmrDelete。

软件定时器错误码

对软件定时器存在失败可能性的操作,包括创建、删除、暂停、重启定时器等等,均需要返回对应的错误码,以便快速定位错误原因。

序号

定义

实际数值

描述

参考解决方案

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

软件定时器链表创建内存不足

申请一块足够大的内存供软件定时器使用

9

LOS_ERRNO_SWTMR_MAXSIZE_INVALID

0x02000308

不正确的软件定时器个数最大值

重新定义该值

10

LOS_ERRNO_SWTMR_HWI_ACTIVE

0x02000309

在中断中使用定时器

修改源代码确保不在中断中使用

11

LOS_ERRNO_SWTMR_HANDLER_POOL_NO_MEM

0x0200030a

membox内存不足

扩大内存

12

LOS_ERRNO_SWTMR_QUEUE_CREATE_FAILED

0x0200030b

软件定时器队列创建失败

检查用以创建队列的内存是否足够

13

LOS_ERRNO_SWTMR_TASK_CREATE_FAILED

0x0200030c

软件定时器任务创建失败

检查用以创建软件定时器任务的内存是否足够并重新创建

14

LOS_ERRNO_SWTMR_NOT_STARTED

0x0200030d

未启动软件定时器

启动软件定时器

15

LOS_ERRNO_SWTMR_STATUS_INVALID

0x0200030e

不正确的软件定时器状态

检查确认软件定时器状态

16

LOS_ERRNO_SWTMR_SORTLIST_NULL

null

暂无

该错误码暂不使用

17

LOS_ERRNO_SWTMR_TICK_PTR_NULL

0x02000310

用以获取软件定时器超时tick数的入参指针为NULL

创建一个有效的变量

错误码定义:错误码是一个32位的存储单元,31~24位表示错误等级,23~16位表示错误码标志,15~8位代表错误码所属模块,7~0位表示错误码序号,如下所示:

#define LOS_ERRNO_OS_NORMAL(MID,ERRNO)  \
(LOS_ERRTYPE_NORMAL | LOS_ERRNO_OS_ID | ((UINT32)(MID) << 8) | (ERRNO))
LOS_ERRTYPE_NORMAL :Define the error level as critical
LOS_ERRNO_OS_ID :OS error code flag.
MID:OS_MOUDLE_ID
ERRNO:error ID number

例如:

#define LOS_ERRNO_SWTMR_PTR_NULL  \
LOS_ERRNO_OS_ERROR(LOS_MOD_SWTMR, 0x00)
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问