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

相关推荐
1621B驱动芯片原厂14 小时前
YL1621 芯片成功案例推荐
stm32·单片机·嵌入式硬件·mcu·51单片机
liu_endong20 小时前
杰发科技AC7840/AC7843——standby模式保留ram数据
mcu·国产·杰发科技·autochips·车规芯片
送外卖的工程师2 天前
STM32F103 驱动 BMP280 气压温湿度传感器 + OLED 显示教程
stm32·单片机·嵌入式硬件·mcu·物联网·proteus·rtdbs
gumu2714 天前
国产MCU打印调试工具Segger RTT
单片机·mcu
菜鸟江多多4 天前
【STM32 Rocket-Pi原理图分享】
c语言·stm32·嵌入式硬件·mcu·智能硬件·原理图
MounRiver_Studio4 天前
RISC-V IDE MRS2进阶分享(一):picolibc C标准库简介与使用
ide·mcu·risc-v·嵌入式开发
MounRiver_Studio4 天前
RISC-V IDE MRS2使用笔记(十四):用户反馈功能
ide·mcu·risc-v·嵌入式开发
MounRiver_Studio4 天前
RISC-V IDE MRS2进阶分享(二):远程调试功能
ide·mcu·risc-v·嵌入式开发
小鱼23335 天前
STM32中的中断机制与应用
c语言·stm32·单片机·嵌入式硬件·mcu
liu_endong6 天前
杰发科技AC7840——CSE的CMAC校验
mcu·杰发科技·autochips·车规芯片