#defineRT_TIMER_FLAG_HARD_TIMER 0x0/**< hard timer,the timer's callback function will be called in tick isr. */ #defineRT_TIMER_FLAG_SOFT_TIMER 0x4/**< soft timer,the timer's callback function will be called in timer thread. */ #defineRT_TIMER_CTRL_SET_TIME 0x0/**< set time...
rt_tick_t rt_timer_next_timeout_tick(void); void rt_timer_check(void); void rt_timer_init(rt_timer_t timer, const char name, void (timeout)(void parameter), void parameter, rt_tick_t time, rt_uint8_t flag); rt_err_t rt_timer_detach(rt_timer_t timer); rt_timer_t rt_timer...
voidrt_system_tick_init(void);rt_tick_trt_tick_get(void);voidrt_tick_set(rt_tick_ttick);voidrt_tick_increase(void);intrt_tick_from_millisecond(rt_int32_tms);voidrt_system_timer_init(void);voidrt_system_timer_thread_init(void);rt_tick_trt_timer_next_timeout_tick(void);voidrt_timer...
rt_tick_t next_timeout;while(1)//软件定时器优先级设置最高优先级0,且线程入口函数中为死循环,因此若函数中没有挂起自身线程和执行线程调度,则始终只运行这个线程{/*get the next timeout tick*///得到软件定时器线程模式中定时器链表的下一个定时器的超时时间点next_timeout =rt_timer_list_next_timeout...
我们继续进入登录后复制timer线程的入口函数,来看看登录后复制timer线程具体做了什么事情,这里我们就通过放源码,看注释来分析一下: 登录后复制/* system timer thread entry */ static void rt_thread_timer_entry(void *parameter) { rt_tick_t next_timeout; ...
struct rt_timer是 RT-Thread 系统定时器的核心数据结构,包含了定时器的基本属性。定时器以跳表形式存储,可以高效插入和查找。它包括定时器的回调函数timeout_func、超时时间init_tick和timeout_tick,以及标识定时器是否周期性或激活状态的标志位parent.flag。
我使用的是RTT5.0,开启了软件定时器,运行大概4个多小时就会出现定时器回调任务不再执行,仿真打断点看,timer.c文件中的定时器线程_timer_thread_entry不再运行了。这可能是哪方面的问题呢 static void _timer_thread_entry(void *parameter) { rt_tick_t next_timeout; while (1) { /* get the next timeou...
void(*timeout_func)(void*parameter);/* 定时器超时调用的函数 */ void*parameter;/* 超时函数的参数 */ rt_tick_tinit_tick;/* 定时器初始超时节拍数 */ rt_tick_ttimeout_tick;/* 定时器实际超时时的节拍数 */ }; typedefstructrt_timer*rt_timer_t; ...
/* Tickless*/ if (pm->timer_mask & (0x01 << mode)) { timeout_tick = rt_timer_next_timeout_tick(); if (timeout_tick == RT_TICK_MAX) { if (pm->ops->timer_start) { pm->ops->timer_start(pm, RT_TICK_MAX); } }
*/if((next_timeout-current_tick)<RT_TICK_MAX/2){/* get the delta timeout tick */next_timeout=next_timeout-current_tick;//计算还差多长时间rt_thread_delay(next_timeout);//休眠差的这段时间}}/* check software timer 检查是否该产生超时事件 ...