软件定时器,单位为时钟节拍,定时数值必须是 OS Tick 的整数倍。
定时器控制块:
struct rt_timer
{
struct rt_object parent;
rt_list_t row[RT_TIMER_SKIP_LIST_LEVEL]; /* 定时器链表节点 */
void (*timeout_func)(void *parameter); /* 定时器超时调用的函数 */
void *parameter; /* 超时函数的参数 */
rt_tick_t init_tick; /* 定时器初始超时节拍数 */
rt_tick_t timeout_tick; /* 定时器实际超时时的节拍数 */
};
typedef struct rt_timer *rt_timer_t;硬件定时器:
在中断上下文环境下执行,因此执行时间要短,不能调用会导致阻塞的函数。
软件定时器:
系统会创建一个软件定时器线程,在线程上下文中执行。
定时器系统初始化
硬件定时器:
void rt_system_timer_init(void);
软件定时器:
void rt_system_timer_thread_init(void);动态创建和删除
rt_timer_t rt_timer_create(const char* name, // 定时器名称
void (*timeout)(void* parameter), // 定时器回调函数
void* parameter, // 传入定时器回调函数的参数
rt_tick_t time, // 定时时间
rt_uint8_t flag); // 定时器行为flag:
RT_TIMER_FLAG_ONE_SHOT:单次
RT_TIMER_FLAG_PERIODIC:周期
RT_TIMER_FLAG_HARD_TIMER:硬件定时器
RT_TIMER_FLAG_SOFT_TIMER:软件定时器
rt_err_t rt_timer_delete(rt_timer_t timer);静态初始化和脱离
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_err_t rt_timer_start(rt_timer_t timer);停止定时器:
rt_err_t rt_timer_stop(rt_timer_t timer);控制定时器
rt_err_t rt_timer_control(rt_timer_t timer, // 定时器
rt_uint8_t cmd, // 控制命令
void* arg); // 控制命令的参数