更新时间:2021-07-08 GMT+08:00
分享

开发指导

使用场景

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

功能

Huawei LiteOS的软件定时器模块为用户提供下面几种功能,接口详细信息可以查看API参考。

表1

功能分类

接口名

描述

创建/删除定时器

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。

开发流程

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

  1. 执行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

  2. 创建定时器LOS_SwtmrCreate,设置定时器的定时时长、定时器模式、超时后的回调函数。
  3. 启动定时器LOS_SwtmrStart。
  4. 获得软件定时器剩余Tick数LOS_SwtmrTimeGet。
  5. 停止定时器LOS_SwtmrStop。
  6. 删除定时器LOS_SwtmrDelete。
分享:

    相关文档

    相关产品