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

相关推荐
liu_endong1 天前
杰发科技AC7801——使用内部晶振
mcu·国产·杰发科技·autochips·车规芯片
天月风沙2 天前
PX4 | 无人机关闭磁力计罗盘飞行(yaw estimate error报错解决方法)
单片机·嵌入式硬件·mcu·无人机
咏颜4 天前
ESP32对接巴法云实现配网
经验分享·mcu·物联网·iot
iCxhust5 天前
Prj09--8088单板机C语言8253产生1KHz方波(1)
c语言·开发语言·c++·单片机·嵌入式硬件·mcu
iCxhust7 天前
8088 单板机 汇编 NMI 中断程序示例 (脱离 DOS 环境)
c语言·开发语言·汇编·单片机·嵌入式硬件·mcu
电子科技圈7 天前
芯科科技推出首批第三代无线开发平台SoC,高度集成的解决方案推动下一波物联网实现突破
嵌入式硬件·mcu·物联网·网络安全·智能家居·智能硬件·iot
WPG大大通8 天前
直播预告 | 聚焦芯必达|打造可靠高效的国产 MCU 与智能 SBC 汽车解决方案
大数据·人工智能·mcu·汽车·大大通·研讨会
电子科技圈9 天前
XMOS以全新智能音频及边缘AI技术亮相广州国际专业灯光音响展
人工智能·嵌入式硬件·mcu·物联网·自然语言处理·音视频·边缘计算
liu_endong10 天前
杰发科技AC7840——CSE硬件加密模块使用(2)
mcu·国产·杰发科技·autochips·车规芯片
liu_endong13 天前
杰发科技AC7801——PWM获取固定脉冲个数
mcu·国产·杰发科技·autochips·车规芯片