软件定时器

描述

软件定时器是基于调度器滴答定时器任务实现的定时器, 因此时间精度最小为滴答定时器的中断频率。 软件定时器的回调函数运行在滴答定时器任务中。

  • 当开启中断底半部时,软件定时器的回调函数运行在中断底半部中;
  • 当关闭中断底半部时,软件定时器的回调函数运行在中断上下文中。

无论是运行在中断底半部还是中断上下文,软件定时器的回调函数都 可使用任何会导致睡眠、阻塞的API。

用法

软件定时器的创建、初始化与删除、销毁

软件定时器同线程一样,支持静态初始化与销毁,动态创建与删除两种方式:

  • 静态初始化与销毁
    • 静态是指用户预先定义对象,这些对象在编译时由编译器分配内存。
    • 初始化:xwosal_swt_init()
    • 销毁:xwosal_swt_destroy()
  • 动态创建与删除
    • 动态是指程序在运行时,通过内存分配函数从某个内存区域上申请分配一块内存, 并把这块内存初始化为所需要的对象。使用完毕后,需要释放内存。
    • 创建:xwosal_swt_create()
    • 删除:xwosal_swt_delete()

软件定时器的标志

  • XWOSAL_SWT_FLAG_RESTART

定时器超时后自动重新开始(用于周期执行某项任务),

  • XWOSAL_SWT_FLAG_AUTORM

定时器超时后自动回收资源

  • XWOSAL_SWT_FLAG_NULL

无任何标志

注意

  • XWOSAL_SWT_FLAG_RESTART不可与XWOSAL_SWT_FLAG_AUTORM同时设置, 若同时设置,系统只会保留XWOS_SWT_FLAG_RESTART,另一标志被丢弃。
  • XWOSAL_SWT_FLAG_AUTORM只对使用xwosal_swt_create()创建的定时器有效。

示例

  • 应用模块:xwam/example/timer
  • 用法:
    • 在配置文件xwbd/电路板名称/cfg/xwam.h中 定义宏XWAMCFG_example_timer1
    • 在初始化流程中(例如:xwos_main())调用 example_timer_start()启动模块。

配置

/* <cfg/xwos.h> */

/* SMP系统 */
#define XWSMPCFG_SD_SWT             1 // 是否启用软件定时器功能,取值:1|0
#define XWSMPCFG_SD_SWT_MEMSLICE    1 // 是否启用xwos_swt对象的memslice缓存,
                                      // 取值:1|0

/* UP系统 */
#define XWUPCFG_SD_SWT              1 // 是否启用软件定时器功能,取值:1|0

API参考

  • 头文件:xwos/osal/swt.h
  • 注释:见头文件