ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:40.02KB ,
资源ID:21179778      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21179778.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(rtthread 的定时器管理源码分析Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

rtthread 的定时器管理源码分析Word格式文档下载.docx

1、/定时器超时例程 11. *parameter;/定时器例程的传入参数 12. 13. rt_tick_tinit_tick;/定时器的超时时间,即总共多长时间将产生超时事件 14. timeout_tick;/定时器超时的时间点,即产生超时事件时那一该的时间点 15. ;16. typedef*rt_timer_t;3.2 rt-thread的软件定时器模式软件定时器线程初始化及启动:ingroupSystemInit4. Thisfunctionwillinitializesystemthread5. 6. voidrt_system_timer_thread_init(void)7. 8

2、. #ifdefRT_USING_TIMER_SOFT/如果采用软件定时器管理模式,则启动定时器线程 rt_list_init(&rt_soft_timer_list);/初始化软件定时器链表 /*startsoftwarert_thread_init(&timer_thread,/初始化软件定时器线程,并启动 timer,rt_thread_timer_entry,15. RT_NULL,16. &timer_thread_stack0,17. sizeof(timer_thread_stack),18. RT_TIMER_THREAD_PRIO,19. 10);20. 21. startu

3、p22. rt_thread_startup(&timer_thread);23. #endif 24. 软件定时器线程如下: 1. /*entry2. staticrt_thread_timer_entry(void*parameter)3. next_timeout;while(1)getthenexttimeoutticknext_timeout=rt_timer_list_next_timeout(&/得到软件定时器链表上的下一个定时器的超时时间点 if(next_timeout=RT_TICK_MAX)/如果超过范围,则挂起当前线程,继续线程调度 noexist,suspendsel

4、f.rt_thread_suspend(rt_thread_self();rt_schedule();elsecurrent_tick;currentcurrent_tickrt_tick_get();/获取当前时间点 23. (next_timeout-current_tick)timeout_tick)RT_TICK_MAX/2)/如果当前的时间点超过定时器的超时时间点 RT_OBJECT_HOOK_CALL(rt_timer_timeout_hook,(t);/使用钩子函数 movenodeton-next;/指向下一定时器 removefromlistfirstlyrt_list_re

5、move(&(t-list);/移除当前定时器 calltimeout_func(t-parameter);/产生定时器超时事件,调用对应处理函数 re-get/再次获取当前时间点 38. 39. tick:%dncurrent_tick);40. 41. (t-parent.flagRT_TIMER_FLAG_PERIODIC)/如果当前定时器是周期性定时器,则将其再次按序放入软件定时器链表 42. RT_TIMER_FLAG_ACTIVATED)43. 44. it45. RT_TIMER_FLAG_ACTIVATED;/置标志为非激活状态 46. rt_timer_start(t);/再

6、次将定时器t放入软件定时器链表末尾 47. 48. 49. 50. stop51. 52. 53. 54. break;notanymore55. 56. 57. leaven58. 上面代码中,为什么定时器里判断超时的条件是(current_tick - ttimeout_tick) RT_TIMER_FLAG_ACTIVATED)/如果传入的定时器已经激活,则直接返回错误 return-RT_ERROR;RT_OBJECT_HOOK_CALL(rt_object_take_hook,(&parent);tick,maxgreatRT_TICK_MAX/2RT_ASSERT(timer-in

7、it_tick2);timer-timeout_tickrt_tick_get()+/得到定时器超时的时间点 disableinterruptlevelrt_hw_interrupt_disable();/关中断 31. #ifdefRT_USING_TIMER_SOFT/如果采用的是软件定时器管理模式,则将定时器加入到rt_soft_timer_list中 RT_TIMER_FLAG_SOFT_TIMER)insertsofttimer_listrt_soft_timer_list;38. #endif rt_timer_list;timer_list-timer_list;next)/将定

8、时器按序加入到定时器链表中 2)rt_list_insert_before(n,/将定时器timer插入到t之前 58. foundsuitablepositionin59. timer_list)/没有找到合适的位置,则放到链表头 60. 61. 62. 63. 64. |=RT_TIMER_FLAG_ACTIVATED;/置定时器为激活状态 65. 66. enable67. rt_hw_interrupt_enable(level);68. 69. #ifdefRT_USING_TIMER_SOFT 70. RT_TIMER_FLAG_SOFT_TIMER)/如果系统采用的是软件定时器管

9、理模式,且软件定时器线程处理ready状态,则恢复此线程 71. 72. whetherisready73. (timer_thread.statRT_THREAD_READY)74. 75. resume76. rt_thread_resume(&/恢复定时器线程 77. /开始线程调度 78. 79. 80. #endif 81. 82. -RT_EOK;83. 软件定时器管理模式的源码分析完了,接下来介绍RTT的硬件定时器管理模式。3.3 RTT的硬件定时器管理模式硬件定时器管理模式顾名思义,就是说与硬件相关,因此,不用的MCU,其部分源码是不一样的,因为其要采用MCU的系统时钟中断例程

10、来实现。以STM32F2XX为例,先找到其启动汇编,位置在:RTT/bsp/stm32f2xx/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F2xx/startup/arm/startup_stm32f2xx.s找到中断向量:plain view plaincopyprint?1. DCDSysTick_Handler;SysTickHandler这是系统时钟中断向量,再找到其中断例程实现:在bsp/stm32f2xx/drivers/board.c文件中:serviceroutine.SysTick_Handler(void)/系统时钟中断例程 enterrt_interrupt_enter();rt_tick_increase();leavert_interrupt_leave();14. 其中rt_tick_i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1