RT-Thread 15. list_timer与软定时器

1. 代码
c 复制代码
void rt_thread_usr1_entry(void *parameter)
{
    /* set LED2 pin mode to output */
    rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);
    while (1)
    {
        rt_pin_write(LED2_PIN, PIN_HIGH);
        rt_thread_mdelay(2000);
        rt_pin_write(LED2_PIN, PIN_LOW);
        rt_thread_mdelay(3000);
    } 
}

int main(void)
{
  
    rt_thread_init(&usr1_thread,
                 USR1_THREAD_NAME,
                 rt_thread_usr1_entry,
                 RT_NULL,
                 &usr1_thread_stack[0],
                 sizeof(usr1_thread_stack),
                 RT_USR1_THREAD_PRIO,
                 20);
    rt_thread_startup(&usr1_thread);
  
    /* set LED1 pin mode to output */
    rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);

    while (1)
    {
        rt_pin_write(LED1_PIN, PIN_HIGH);
        rt_thread_mdelay(500);
        rt_pin_write(LED1_PIN, PIN_LOW);
        rt_thread_mdelay(600);
    }
}
2. list_timer结果
3. 解释
c 复制代码
usr1     0x0000012c 0x00000dad activated   one shot

0x0000012c: 300个时钟周期,即处于rt_thread_mdelay(3000);

c 复制代码
main     0x00000032 0x00000d17 activated   one shot

0x00000032: 50个时钟周期,即处于rt_thread_mdelay(500);

4.增加软定时器

//usrtimer.c

c 复制代码
#include <rtthread.h>

/* 定时器的控制块 */
static struct rt_timer timer1;
static struct rt_timer timer2;
static int cnt = 0;

/* 定时器 1 超时函数 */
static void timeout1(void* parameter)
{
    rt_kprintf("periodic timer is timeout\n");
    /* 运行 10 次 */
    if (cnt++>= 9)
    {
        rt_timer_stop(&timer1);
    }
}

/* 定时器 2 超时函数 */
static void timeout2(void* parameter)
{
    rt_kprintf("one shot timer is timeout\n");
}

int timer_static_sample(void)
{
    /* 初始化定时器 */
    rt_timer_init(&timer1, 
                    "timer1",  /* 定时器名字是 timer1 */
                    timeout1, /* 超时时回调的处理函数 */
                    RT_NULL, /* 超时函数的入口参数 */
                    100, /* 定时长度,以 OS Tick 为单位,即 10 个 OS Tick */
                    RT_TIMER_FLAG_PERIODIC); /* 周期性定时器 */
    rt_timer_init(&timer2, 
                    "timer2",   /* 定时器名字是 timer2 */
                    timeout2, /* 超时时回调的处理函数 */
                    RT_NULL, /* 超时函数的入口参数 */
                    300, /* 定时长度为 30 个 OS Tick */
                    RT_TIMER_FLAG_ONE_SHOT); /* 单次定时器 */
  

    /* 启动定时器 */
    rt_timer_start(&timer1);
    rt_timer_start(&timer2);
    return 0;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(timer_static_sample, timer_static sample);
5. MSH命令开启软件定时器
bash 复制代码
msh > timer_static_sample

timer_static_sample()会执行,timer1和timer2会开始工作。输入list_timer,发现多了timer1、timer2

相关推荐
切糕师学AI4 天前
MCU中的 HSI、HSE、LSI、LSE
嵌入式硬件·mcu·硬件时钟
酷飞飞4 天前
GD32F407VE天空星开发板的188数码管
stm32·单片机·嵌入式硬件·mcu·arm
烟雨彷徨~~Xun4 天前
esp8266+dht11传感器实时上报温湿度
单片机·mcu·物联网
La Pulga4 天前
【STM32】FLASH闪存
android·c语言·javascript·stm32·单片机·嵌入式硬件·mcu
FanXing_zl4 天前
基于整数MCU的FOC控制定标策略深度解析
单片机·嵌入式硬件·mcu·算法·定点运算·q15
FanXing_zl4 天前
整数MCU实现FOC控制:深度解析与优化实践
单片机·嵌入式硬件·mcu·浮点运算
FanXing_zl5 天前
MCU寄存器配置深度解析:从原理到实践
mcu·寄存器·mcu寄存器配置·寄存器配置
La Pulga7 天前
【STM32】WDG看门狗
c语言·stm32·单片机·嵌入式硬件·mcu
切糕师学AI8 天前
MCU的时钟系统
嵌入式硬件·mcu·芯片
帅帅兔子9 天前
2.4寸SPI串口ILI9341芯片彩色LCD驱动
stm32·单片机·嵌入式硬件·mcu