定时器的超时时间 * @param flag 定时器的标志 */ void rt_timer_init(rt_timer_t timer,...
可以在初始化 / 创建定时器时使用参数RT_TIMER_FLAG_SOFT_TIMER 来指定设置 SOFT_TIMER 模式。 个人的习惯是,应用中还是定义登录后复制RT_USING_TIMER_SOFT,然后使用 SOFT_TIMER 模式,个人感觉这样才更“像”软件定时器。 最后要给个建议,实际应用,不管是 HARD_TIMER 模式,还是 SOFT_TIMER 模式,在超时函数中都...
大概rtthread觉得直接等待的阻塞延时效率不够高,逻辑不够优美;所以它给每个thread都配置了一个rt_timer类型的thread_timer定时器; 所有定时器由定时器链表统一管理,通过对thread_timer定时器统一管理多个线程的延时,效率高,逻辑优美; 2.1 定时器结构体 //rtdef.h #defineRT_TIMER_FLAG_DEACTI...
SOFT_TIMER:通过 RT_USING_TIMER_SOFT决定是否开启此功能,系统会在初始化时创建一个timer线程,这种模式的定时器的超时函数的上下文是线程。 二、rtthread定时器api //创建一个定时器 /* name:定时器名称 timeout:超时函数 parameter:超时函数的参数 time:超时时间,单位:时钟节拍 flag:标志 */ rt_timer_t rt_t...
name:指定了timer对象在rt_object中的对象名称,如果需要可以通过rt_object_find来查找。 timeout:指定了定时器超时后回调处理的函数。 time:定时器的超时时间片 flag:定时器创建时可以支持一些选项,例如当创建一个软件定时器时则可以指定flag为RT_TIMER_FLAG_SOFT_TIMER,当需要指定这个定时器为周期运行时则可以指定RT...
struct rt_timer thread_timer; /**< 内嵌的线程定时器 */ void (*cleanup)(struct rt_thread *tid); /**< 线程退出时的清除函数 */ rt_uint32_t user_data; /**< 私有用户数据 */ }; 总的来看,线程皆有由几类成员组成:object,栈相关信息,优先级信息,事件,定时器信息,私有数据指针。在RT-Thread...
二、rtthread定时器api //创建一个定时器 /* name:定时器名称 timeout:超时函数 parameter:超时函数的参数 time:超时时间,单位:时钟节拍 flag:标志 */ rt_timer_t rt_timer_create(const char* name, void (*timeout)(void* parameter), void* parameter, rt_tick_t time, rt_uint8_t flag); ...
在RT-Thread 使用中,往往都会定义RT_USING_TIMER_SOFT,使用软件定时器并且启动 SOFT_TIMER 模式 ,该模式被启用后,系统会在初始化时创建一个timer线程,用来对软件定时器经常管理,那么我们就通过源码来看看 RT-Thread 到底是如何操作的。 通过《RT-Thread 记录(二、RT-Thread 内核启动流程 — 启动文件和源码分析)》...
还是一个规律,rt_timer_init是针对静态的rt_timer进行初始化,rt_timer_create是动态创建rt_timer,并进行初始化。 rt_timer_t rt_timer_create(const char *name, void (*timeout)(void *parameter), void *parameter, rt_tick_t time, rt_uint8_t flag) ...
RT-Thread 提供的启动定时器函数如下: 函数的参数 timer 为定时器控制块指针(定时器句柄),指向要启动的定时器控制块。 调用启动函数后,定时器的状态更改为激活状态,并按照超时时间顺序插入到 rt_timer_list 队列链表中。 启动定时器后,如果想停止它,可以用下面的函数: ...