rt_thread的定时器管理源码分析

rt_thread的定时器管理源码分析

ID:30070099

大小:296.55 KB

页数:19页

时间:2018-12-26

rt_thread的定时器管理源码分析_第1页
rt_thread的定时器管理源码分析_第2页
rt_thread的定时器管理源码分析_第3页
rt_thread的定时器管理源码分析_第4页
rt_thread的定时器管理源码分析_第5页
资源描述:

《rt_thread的定时器管理源码分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、1前言rt-thread可以采用软件定时器或硬件定时器来实现定时器管理的,所谓软件定时器是指由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受数目限制的定时器服务。而硬件定时器是芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。硬件定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式。软件定时器的精度取决于它使用的硬件定时器精度。而rt-thread操作系统在默认情况下是采用的硬件定时器的方式,用

2、户可以通过修改宏定义#ifdefRT_USING_TIMER_SOFT来修改采用哪种。2rt-thread的定时器的基本工作原理在RT-Thread定时器模块维护两个重要的全局变量,一个是当前系统的时间rt_tick(当硬件定时器中断来临时,它将加1),另一个是定时器链表rt_timer_list,系统中新创建的定时期都会被以排序的方式插入到rt_timer_list(硬件定时器模式下使用)链表中,rt_timer_list的每个节点保留了一个定时器的信息,并且在这个节点加入链表时就计算好了产生时间到达时的时间点,即tick,在

3、rt-thread系统中如果采用软件定时器模式,则存在一定时器线程rt_thread_timer_entry,不断获取当前TICK值并与定时器链表rt_timer_list上的定时器对比判断是否时间已到,一旦发现就调用对应的回调函数,即事件处理函数进行处理,而如果采用硬件定时器管理模式的话,则该检查过程放到系统时钟中断例程中进行处理,此时,是不存在定时器线程的。如下图:注:如果采用软件定时器软件定时器,则该定时器链表为rt_soft_timer_list。3源码分析3.1数据定义[cpp]viewplaincopyprint?1

4、./** 2. * timer structure 3. */  4.struct rt_timer  1.{  2.    struct rt_object parent; //内核对象  3.  4.    rt_list_t        list;      //链表节点  5.  6.    void (*timeout_func)(void *parameter);  //定时器超时例程  7.    void            *parameter;       //定时器例程的传入参数  8.  9.    

5、rt_tick_t        init_tick;       //定时器的超时时间,即总共多长时间将产生超时事件  10.    rt_tick_t        timeout_tick;     //定时器超时的时间点,即产生超时事件时那一该的时间点  11.};  12.typedef struct rt_timer *rt_timer_t;  /***timerstructure*/structrt_timer{structrt_objectparent;//内核对象rt_list_tlist;//链表节点void

6、(*timeout_func)(void*parameter);//定时器超时例程void*parameter;//定时器例程的传入参数rt_tick_tinit_tick;//定时器的超时时间,即总共多长时间将产生超时事件rt_tick_ttimeout_tick;//定时器超时的时间点,即产生超时事件时那一该的时间点};typedefstructrt_timer*rt_timer_t;3.2rt-thread的软件定时器模式软件定时器线程初始化及启动:[cpp]viewplaincopyprint?1./** 2. * @i

7、ngroup SystemInit 3. * 4. * This function will initialize system timer thread 5. */  6.void rt_system_timer_thread_init(void)  7.{  8.#ifdef RT_USING_TIMER_SOFT//如果采用软件定时器管理模式,则启动定时器线程  9.    rt_list_init(&rt_soft_timer_list);//初始化软件定时器链表  10.  11.    /* start softwa

8、re timer thread */  12.    rt_thread_init(&timer_thread,//初始化软件定时器线程,并启动  13.                   "timer",  14.                   rt_

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。