2026/6/10 4:08:44
网站建设
项目流程
vs2010网站开发示例,做电脑网站手机能显示,php语言网站开发,nginx php7 wordpress由于定时器模拟实现的一些机制#xff0c;将导致我们在使用时容现某些低级错误。为了更好地理解这些错误#xff0c;本小节介绍RT-Thread定时器的基本设计原理。
注#xff1a;本小节只对其设计做比较简单的介绍#xff0c;目的是更好地掌握API的使用。
定时器是如何被触…由于定时器模拟实现的一些机制将导致我们在使用时容现某些低级错误。为了更好地理解这些错误本小节介绍RT-Thread定时器的基本设计原理。注本小节只对其设计做比较简单的介绍目的是更好地掌握API的使用。定时器是如何被触发的与时间片轮转机制工作原理类似RT-Thread定时器依赖系统时钟节拍tick中断来触发执行。如下图所示当系统时钟节拍产生一次tick中断时RT-Thread 会调用rt_tick_increasetick 计数器加 1。系统检查所有已启动的定时器。若某定时器的超时时间已到执行其绑定的回调函数在中断上下文中。若是周期定时器重置下次触发时间。定时器精度由于定时器基于系统时钟节拍中断触发执行因此可知其精度受时钟节拍周期影响即最小的定时时间为1个tick。HARD_TIMER模式的定时器默认情况下创建的定时器会被加入到定时器队列_timer_list中且该链表为按触发时间排序的链表。static rt_list_t _timer_list[RT_TIMER_SKIP_LIST_LEVEL];当我们调用rt_timer_start()启动定时器时定时器将插入到该队列中。这样一来当定时中断发生时RT-Thread检查各个定时器是否满足超时条件。若满足调用其回调函数并且将周期定时器重新插入链表。而如果是一性次的定时器则会从该链表中移除。SOFT_TIMER模式的定时器此外还有另外一种模式的定时器SOFT_TIMER。要启用这种定时器只需要在创建定时器时传递以下标志宏#define RT_TIMER_FLAG_SOFT_TIMER 0x4 /* 软件定时器 */在RT-Thread内部采用了专门的定时器任务来扫描这些定时器并执行回调函数。上述任务相关的配置宏如下#define RT_TIMER_THREAD_PRIO 4 #define RT_TIMER_THREAD_STACK_SIZE 512示例创建SOFT_TIMER模式的定时器下面的代码演示了如何创建SOFT_TIMER模式的定时器。#include rtthread.h #include base.h #include rtconfig.h #include rtdef.h rt_timer_t led_timer; // 回调函数 static void led_timer_cb(void *parameter) { RT_UNUSED(parameter); led_toggle(LED0); // 切换LED 状态 static int count; if (count 20) { // 可以关闭 rt_timer_stop(led_timer); } } struct rt_timer oneshort_timer; static void oneshort_timer_cb (void * parameter) { RT_UNUSED(parameter); led_toggle(LED1); // 可以重启 rt_timer_start(oneshort_timer); } int main (void) { hardware_init(); // 创建一个周期性定时器1000ms led_timer rt_timer_create(led_t, led_timer_cb, (void *)20, rt_tick_from_millisecond(500), // RT_TICK_PER_SECOND, RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER); if (led_timer ! RT_NULL) { rt_timer_start(led_timer); // 启动定时器 } rt_timer_init(oneshort_timer, oneshort, oneshort_timer_cb, RT_NULL, 3*RT_TICK_PER_SECOND, // 3秒 RT_TIMER_FLAG_ONE_SHOT | RT_TIMER_FLAG_SOFT_TIMER); rt_timer_start(oneshort_timer); return 0; }课程推荐全新升级的手写RTOS课程从原理到实战一次掌握操作系统的核心用10000行代码手写一个TCP/IP协议栈硬核项目从0手搓一个RISC-V模拟器作者介绍 李述铜嵌入式系统与底层架构领域讲师专注于操作系统、CPU 架构、RTOS 内核与系统软件实现原理的教学与研究。 出版作品《从0手写x86计算机操作系统》主讲课程包括《从0手写嵌入式操作系统》《从0手写TCP/IP协议栈》《从0手写FAT32文件系统》等。