RTT Nano学习笔记 6 - 定时器

本文详细介绍了如何在软件中使用定时器,包括定时器的创建方法、通过rtosTimerCreate函数设定周期性或单次定时任务,以及如何启动和停止定时器。实例演示了如何设置不同类型的定时器并观察其行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 创建定时器

2. 启动定时器

3. 停止定时器


这里的定时器指的是软件定时器,功能与硬件定时器一样,它也是创建一个线程,超时函数运行在线程里面,该线程具有线程的属性,优先级,栈大小等,不过没有时间片的概念。

1. 创建定时器

#define rtosTimerCreate(                                \
        handle,     /*Timer Handle*/                    \
        name,       /*Timer Name*/                      \
        timeout,    /*timeout function*/                \
        parameter,  /*the parameter of function*/       \
        time,       /*the tick of timer*/               \
        flag        /*the flag of timer*/               \
    )                                                   \
    {                                                   \
        handle = rt_timer_create(name, timeout,         \
            parameter, time, flag);                     \
    }

参数handle是定时器的handle值,

#define RTOS_TIME_HANDLE                                rt_timer_t

接下来3个参数含义与进程创建类似,参数time表示定时器溢出的时间长度(以tick为单位),参数flag指定时器的类型,分为单次定时和周期性定时。

#define RTOS_TIMER_ONE_SHOT                             RT_TIMER_FLAG_ONE_SHOT
#define RTOS_TIMER_PERIODIC                             RT_TIMER_FLAG_PERIODIC

例如创建2个定时器,分别为单次和周期性。

static RTOS_TIIME_HANDLE timer1;
static RTOS_TIIME_HANDLE timer2;

static void timerout1(void *parameter)
{
    Printf("T1\n");
}

static void timerout2(void *parameter)
{
    Printf("T2\n");
}

rtosTimerCreate(timer1, "timer1", timerout1, NULL, 300, RTOS_TIMER_PERIODIC);
rtosTimerCreate(timer2, "timer2", timerout2, NULL, 601, RTOS_TIMER_ONE_SHOT);

2. 启动定时器

#define rtosTimerStart(                                 \
        handle                                          \
    )                                                   \
    {                                                   \
        rt_timer_start(handle);                         \
    }

当定时器被创建或者初始化以后,并不会被立即启动,必须在调用该函数接口后,才开始工作。

启动上例中的2个定时器,打印结果如下

T1
T1
T2
T1
T1
T1
T1
T1
T1

T1是周期性的300ms定时器,所以会每隔300ms运行一次,而T2是601ms一次性定时器,所以在T1运行2次后执行了一次。 

3. 停止定时器

#define rtosTimerStop(                                  \
        handle                                          \
    )                                                   \
    {                                                   \
        rt_timer_stop(handle);                          \
    }

启动定时器以后,若想使它停止,可以调用该函数接口。

将Timer1的溢出函数修改为10次后停止该定时器。

static uint8_t timeCount = 0;

static void timerout1(void *parameter)
{
    timeCount++;
    Printf("T1\n");
    if(timeCount > 9)
        rtosTimerStop(timer1);
}

打印结果:

T1
T1
T2
T1
T1
T1
T1
T1
T1
T1
T1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值