嵌入式操作系统内核原理和开发(实时系统中的定时器)

嵌入式操作系统内核原理和开发(实时系统中的定时器)

ID:9337034

大小:110.05 KB

页数:7页

时间:2018-04-28

嵌入式操作系统内核原理和开发(实时系统中的定时器)_第1页
嵌入式操作系统内核原理和开发(实时系统中的定时器)_第2页
嵌入式操作系统内核原理和开发(实时系统中的定时器)_第3页
嵌入式操作系统内核原理和开发(实时系统中的定时器)_第4页
嵌入式操作系统内核原理和开发(实时系统中的定时器)_第5页
资源描述:

《嵌入式操作系统内核原理和开发(实时系统中的定时器)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、软件英才网软件行业驰名招聘网站嵌入式操作系统内核原理和开发(实时系统中的定时器)关于定时器的内容,其实我们之前也讨论过,也书写过相应的代码,但是表达得比较晦涩,效率也比较低。所以我们这里重新再讲一下定时器的相关代码,看看嵌入式系统中的定时器是怎么实现的。在我们之前讨论线程延时的时候就使用hash的方法,将不同的线程归类到不同的延时队列当中,并且按照时间长短先后排列,这样在最短的时间内就可以寻找到最合适的线程了。本质上,线程延时和定时器的基本原理是一样的。唯一的区别就是,线程延时响应的优先级要高一些,而定时器一般由独立线程完成,rawo

2、s也是这么做的。[cpp]viewplaincopy1voidtimer_task(void*pa)2{3RAW_U16position;4LIST*timer_head_ptr;5LIST*iter;6LIST*iter_temp;7RAW_TIMER*timer_ptr;89timer_sem.count=0;1011while(1){1213/*timertaskwillbeblockedaftercallthisfunction*/14raw_semaphore_get(&timer_sem,RAW_WAIT_FOREVER)

3、;1516/*Disablethesystemschedulewedonotneeddisableinterruptsincenothingtodowithinterrupt*/17raw_disable_sche();1819/*calculatewhichtimer_head*/20raw_timer_count++;21position=(RAW_U16)(raw_timer_count&(TIMER_HEAD_NUMBERS-1));22timer_head_ptr=&timer_head[position];2324iter

4、=timer_head_ptr->next;2526while(RAW_TRUE){27/*iftimerexits*/28if(iter!=timer_head_ptr){29/*Mustuseiter_tempbecauseitermayberemovelater.*/30iter_temp=iter->next;有需要请联系我们软件英才网软件行业驰名招聘网站1timer_ptr=list_entry(iter,RAW_TIMER,timer_list);23/*iftimeout*/4if(raw_timer_count==ti

5、mer_ptr->match){56/*removeformtimerlist*/7timer_list_remove(timer_ptr);8/*iftimerisreschedulable*/9if(timer_ptr->reschedule_ticks){10/*Sortbyremaintime*/11timer_ptr->remain=timer_ptr->reschedule_ticks;1213timer_ptr->match=raw_timer_count+timer_ptr->remain;14position=(RA

6、W_U16)(timer_ptr->match&(TIMER_HEAD_NUMBERS-1));15timer_ptr->to_head=&timer_head[position];16timer_list_priority_insert(&timer_head[position],timer_ptr);1718}1920/*Anywaybothconditionneedtocallregisteredtimerfunction*/2122if(timer_ptr->raw_timeout_function){23timer_ptr-

7、>raw_timeout_function(timer_ptr->raw_timeout_param);2425}2627iter=iter_temp;28}2930else{3132break;3334}3536}37/*exitbecausetimerisnotexit*/38else{有需要请联系我们软件英才网软件行业驰名招聘网站12break;3}45}67raw_enable_sche();8}9}10由于基本原理和之前的线程延时是一样的,所以这里就不重复了。定时器的基本操作其实也不多,主要包括定时器创建、启动定时器、修改定

8、时器、关闭定时器、删除定时器共五个基本函数,大家可以和我一起慢慢看过来。[cpp]viewplaincopy11RAW_U16raw_timer_create(RAW_TIMER*timer_ptr,RAW_U8*nam

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

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

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