rt-thread学习2 - 时钟

  1. 系统时间

    rt_tick 全局变量,记录开机时间

    rt_tick_t rt_tick_get(void);
    
    返回描述
    rt_tick当前时钟节拍值
  2. 定时器控制块

    struct rt_timer
    {
        struct rt_object parent;
        rt_list_t row[RT_TIMER_SKIP_LIST_LEVEL];     /* 定时器链表节点 */
    
        void (*timeout_func)(void *parameter);       /* 定时器超时调用的函数 */
        void      *parameter;                        /* 超时函数的参数 */
        rt_tick_t init_tick;                         /* 定时器初始超时节拍数 */
        rt_tick_t timeout_tick;                      /* 定时器实际超时时的节拍数 */
    };
    typedef struct rt_timer *rt_timer_t;
    

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FNOQPpiG-1607954433686)(https://www.rt-thread.org/document/site/programming-manual/timer/figures/05timer_ops.png)]

定时器API
1. 创建删除
动态创建一个定时器
rt_timer_t rt_timer_create(const char* name,
                           void (*timeout)(void* parameter),
                           void* parameter,
                           rt_tick_t time,
                           rt_uint8_t flag);
参数描述
name定时器的名称
void (timeout) (void parameter)定时器超时函数指针(当定时器超时时,系统会调用这个函数)
parameter定时器超时函数的入口参数(当定时器超时时,调用超时回调函数会把这个参数做为入口参数传递给超时函数)
time定时器的超时时间,单位是时钟节拍
flag定时器创建时的参数,支持的值包括单次定时、周期定时、硬件定时器、软件定时器等(可以用 “或” 关系取多个值)
返回——
RT_NULL创建失败(通常会由于系统内存不够用而返回 RT_NULL)
定时器的句柄定时器创建成功

flag:可以以 | 方式传递

#define RT_TIMER_FLAG_ONE_SHOT      0x0     /* 单次定时     */
#define RT_TIMER_FLAG_PERIODIC      0x2     /* 周期定时     */
#define RT_TIMER_FLAG_HARD_TIMER    0x0     /* 硬件定时器   */
#define RT_TIMER_FLAG_SOFT_TIMER    0x4     /* 软件定时器   */
静态创建定时器:
void rt_timer_init(rt_timer_t timer,
                   const char* name,
                   void (*timeout)(void* parameter),
                   void* parameter,
                   rt_tick_t time, rt_uint8_t flag);
参数描述
timer定时器句柄,指向要初始化的定时器控制块
name定时器的名称
void (timeout) (void parameter)定时器超时函数指针(当定时器超时时,系统会调用这个函数)
parameter定时器超时函数的入口参数(当定时器超时时,调用超时回调函数会把这个参数做为入口参数传递给超时函数)
time定时器的超时时间,单位是时钟节拍
flag(同上)定时器创建时的参数,支持的值包括单次定时、周期定时、硬件定时器、软件定时器(可以用 “或” 关系取多个值),详见创建定时器小节
删除回收一个动态定时器:
rt_err_t rt_timer_delete(rt_timer_t timer);
参数描述
timer定时器句柄,指向要删除的定时器
返回——
RT_EOK删除成功(如果参数 timer 句柄是一个 RT_NULL,将会导致一个 ASSERT 断言)
删除一个静态定时器
rt_err_t rt_timer_detach(rt_timer_t timer);
参数描述
timer定时器句柄,指向要脱离的定时器控制块
返回——
RT_EOK脱离成功
2. 启动和停止定时器
启动定时器
rt_err_t rt_timer_start(rt_timer_t timer);
参数描述
timer定时器句柄,指向要启动的定时器控制块
返回——
RT_EOK启动成功
停止定时器
rt_err_t rt_timer_stop(rt_timer_t timer);
参数描述
timer定时器句柄,指向要停止的定时器控制块
返回——
RT_EOK成功停止定时器
- RT_ERRORtimer 已经处于停止状态
3. 控制定时器
rt_err_t rt_timer_control(rt_timer_t timer, rt_uint8_t cmd, void* arg);
参数描述
timer定时器句柄,指向要停止的定时器控制块
cmd用于控制定时器的命令,当前支持四个命令,分别是设置定时时间,查看定时时间,设置单次触发,设置周期触发
arg与 cmd 相对应的控制命令参数 比如,cmd 为设定超时时间时,就可以将超时时间参数通过 arg 进行设定
返回——
RT_EOK成功

cmd:

#define RT_TIMER_CTRL_SET_TIME      0x0     /* 设置定时器超时时间       */
#define RT_TIMER_CTRL_GET_TIME      0x1     /* 获得定时器超时时间       */
#define RT_TIMER_CTRL_SET_ONESHOT   0x2     /* 设置定时器为单次定时器   */
#define RT_TIMER_CTRL_SET_PERIODIC  0x3     /* 设置定时器为周期型定时器 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值