应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

RT时钟管理

  时钟节拍
  任何操作系统都需要提供一个时钟节拍,以供系统处理所有和时间有关的事件,如延时、线程的时间片轮转调度以及定时器超时等。时钟节拍(OSTick)是操作系统中最小的时间单位。
  时钟节拍是特定的周期性中断,这个中断之间的时间间隔取决于具体的应用,一般是1100ms。时钟节拍率越快,系统的额外开销就越大。
  RTThread中,一个时钟节拍的时长根据rtconfig。h配置文件中,RTTICKPERSECOND的定义来调整,等于1RTTICKPERSECOND秒。
  时钟节拍的实现
  时钟节拍由配置为中断触发模式的硬件定时器产生,在中断服务程序中调用如下函数,通知操作系统已经过去一个系统时钟:voidrttickincrease(void){structrtthreadthread;全局rttick递增ifdefRTUSINGSMPrtcpuself()tick;elserttick;endif检查时间片threadrtthreadself();threadremainingtick;if(threadremainingtick0){重新赋初值threadremainingtickthreadinittick;线程挂起threadstatRTTHREADSTATYIELD;yieldrtthreadyield();}检查定时器rttimercheck();}
  从源代码中可以看出,每经过一个时钟节拍,全局变量rttick的值就会加1。然后检查当前线程的时间片是否用完,以及是否有定时器超时。如果当前线程的时间片用完,则进行同优先级线程之间的切换。
  不同的硬件定时器中断实现都不同,以STM32定时器中断为例:voidSysTickHandler(void){进入中断rtinterruptenter();rttickincrease();退出中断rtinterruptleave();}
  在中断函数中,调用rttickincrease()对全局变量rttcik加1。
  rttick的值表示了系统从启动到现在共经过的时钟节拍个数。定时器工作机制
  RTThread提供的定时器基于系统的节拍,提供了基于节拍整数倍的定时能力,即定时器定时以时钟节拍为单位。如此,定时器定时长短是OSTick时长的整数倍。
  如果一个时钟节拍是10ms,那么系统软件定时器时长只能是10ms、20ms、100等,而不能是15ms。
  定时器介绍
  RTThread提供了两种类型的定时器:单次触发定时器。这类定时器触发一次定时器事件后,会自动停止。周期触发定时器。这类定时器会周期性地触发定时器事件,直到用户手动停止。
  另外,根据超时函数执行时所处地的上下文环境,RTThread的定时器有两种工作模式:HARDTIMER模式,超时函数在中断上下文环境中执行。SOFTTIMER模式,在系统创建的定时器线程上下文环境中执行。
  HARDTIMER模式的定时器
  这种模式是RTThread定时器默认的工作方式,定时器超时后,超时函数在系统时钟中断的上下文环境中执行。
  这种情况下,对于超时函数的要求与中断服务例程的要求相同:执行时间应该尽量短、执行时不应该导致当前线程挂起等。否则会导致其他中断的响应时间加长,或抢占了其他线程执行的时间。
  SOFTTIMER模式的定时器
  这种工作模式,需要通过宏定义RTUSINGTIMERSOFT来决定是否启用。启用这个模式后,RTThread会在初始化时创建一个timer线程,SOFTTIMER模式的定时器超时函数都会在timer线中执行。
  定时器如何工作
  RTThread维护着两个重要的全局变量:rttick,当前系统经过的时钟节拍个数。rttimerlist,定时器链表。创建并激活的定时器都会按照超时时间从小到大进行排序,插入到这个链表中。
  如下图所示,系统当前的rttick值为20,且已经创建并启动了三个定时器:(1)定时为50个节拍的Timer1(2)定时为100个节拍的timer2(3)定时为500个节拍的timer3。
  这三个定时器分别加上系统当前时间rttick,从小到大排序链接在rttimerlist中:
  rttick随着硬件定时器的触发一直在增长,50个节拍后,rttick从20增长到70,与Timer1的timerout值相同,这时会触发Timer1定时器关联的超时函数,同时将其从rttimerlist链表上删除。
  同理,100个节拍和500个节拍过去后,Timer2和Timer3定时器的超时函数会被触发执行,将定时器Timer2和Timer3从rttimerlist中删除。
  定时器控制块
  定时器控制块是RTThread用于管理定时器的一个数据结构,由结构体structrttimer定义形成定时器内核对象,再链接到内核容器中进行管理。
  定时器控制块会存储定时器的一些信息,例如初始时钟节拍数、超时到达的节拍数、定时器之间连接用的链表结构、超时回调函数等。具体定义如下:structrttimer{structrtobjectparent;rtlisttrow〔RTTIMERSKIPLISTLEVEL〕;定时器链表节点void(timeoutfunc)(voidparameter);定时器超时函数voidparameter;超时函数的参数rtticktinittick;定时器设定的超时节拍数rttickttimeouttick;定时器实际超时时的节拍数};typedefstructrttimerrttimert;定时器管理
  前面介绍了定时器相关的理论知识,那么RTThread提供了怎样的定时器操作函数,以及如何使用它们呢?
  RTThread提供的定时器相关的操作包括:创建初始化定时器启动定时器控制定时器删除脱离定时器
  所有定时器会在定时超时后从定时器链表中被删除,而周期性定时器会在它再次启动时被加入定时器链表中。
  1。创建定时器
  创建一个定时器有两种方式:动态创建和静态初始化。
  动态创建一个定时器,使用如下函数接口:rttimertrttimercreate(constcharname,void(timeout)(voidparameter),voidparameter,rttickttime,rtuint8tflag)
  调用此函数后,内核自动从内存堆中分配一个定时器控制块,然后初始化该定时器控制块。各个参数说明如下:
  参数
  描述
  name
  定时器名称
  timeout
  定时器超时函数指针
  parameter
  定时器超时函数的入口参数
  time
  定时器超时时间,单位是时钟节拍
  flag
  创建定时器的参数,其值包括单次定时、周期定时、硬件定时器、软件定时器等
  创建失败,返回RTNULL。创建成功,则返回定时器控制块指针。
  定时器标志用到的宏定义:defineRTTIMERFLAGONESHOT0x0单次定时defineRTTIMERFLAGPERIODIC0x2周期定时defineRTTIMERFLAGHARDTIMER0x0硬件定时器defineRTTIMERFLAGSOFTTIMER0x4软件定时器
  上面两组可以以或逻辑方式赋值给flag。
  静态创建一个定时器,需要用户定义一个定时器控制块结构体structrttimer变量,然后rttimerinit()函数对其初始化。该函数原型如下:voidrttimerinit(rttimerttimer,constcharname,void(timeout)(voidparameter),voidparameter,rttickttime,rtuint8tflag);
  该函数比rttimercreate()多了一个参数timer,其他参数都相同,不再赘述。参数timer实际上是定时器控制块指针。
  2。启动定时器
  定时器创建之后,不会被立即启动,需要在调用启动定时器函数接口后,才开始工作。
  RTThread提供的启动定时器函数如下:rterrtrttimerstart(rttimerttimer);
  函数的参数timer为定时器控制块指针(定时器句柄),指向要启动的定时器控制块。
  调用启动函数后,定时器的状态更改为激活状态,并按照超时时间顺序插入到rttimerlist队列链表中。
  启动定时器后,如果想停止它,可以用下面的函数:rterrtrttimerstop(rttimerttimer);
  调用该函数后,定时器状态更改为停止,并从rttimerlist链表中脱离出来,不参与定时器超时检查。
  函数返回RTEOK,表示成功停止定时器。返回RTERROR,说明定时器已经处于停止状态了。定时器应用演示
  理论实践是学习新知识最有效的方法。
  举例来演示如何创建定时器。这个例程动态创建两个定时器,一个单次定时器,一个周期定时器,并让定时器运行一段时间后停止。代码如下:includertthread。h定时器的控制块staticrttimerttimer1;staticrttimerttimer2;staticintcnt0;定时器1超时函数staticvoidtimeout1(voidparameter){rtkprintf(periodictimeristimeoutd,cnt);运行第10次,停止周期定时器if(cnt9){rttimerstop(timer1);rtkprintf(periodictimerwasstopped!);}}定时器2超时函数staticvoidtimeout2(voidparameter){rtkprintf(oneshottimeristimeout);}intmain(){创建定时器1周期定时器timer1rttimercreate(timer1,timeout1,RTNULL,10,RTTIMERFLAGPERIODIC);启动定时器1if(timer1!RTNULL){rttimerstart(timer1);}创建定时器2单次定时器timer2rttimercreate(timer2,timeout2,RTNULL,30,RTTIMERFLAGONESHOT);启动定时器2if(timer2!RTNULL){rttimerstart(timer2);}return0;}
  编译运行结果如下:
  周期性定时器1的超时函数,每10节拍运行1次,共运行10次,之后停止(调用rttimerstop())。
  单次定时器2的超时函数在30个时钟节拍后运行一次。
  下面举例说明静态创建定时器,需要定义定时器控制块结构变量,然后调用初始化函数对其初始化:includertthread。h定时器的控制块staticstructrttimertimer1;staticstructrttimertimer2;staticintcnt0;定时器1超时函数staticvoidtimeout1(voidparameter){rtkprintf(periodictimeristimeout);运行10次if(cnt9){rttimerstop(timer1);}}定时器2超时函数staticvoidtimeout2(voidparameter){rtkprintf(oneshottimeristimeout);}intmain(void){初始化定时器1rttimerinit(timer1,timer1,定时器名字是timer1timeout1,RTNULL,10,RTTIMERFLAGPERIODIC);周期定时器初始化定时器2rttimerinit(timer2,timer2,定时器名字是timer2timeout2,RTNULL,30,RTTIMERFLAGONESHOT);单次定时器启动定时器rttimerstart(timer1);rttimerstart(timer2);return0;}
  其执行结果与动态创建示例相同。其他定时器管理函数
  初学者掌握定时器创建使用即可,RTThread还提供了其他的定时器管理函数,可以了解学习。
  1。删除定时器
  动态创建的定时器,可以用下面的函数删除:rterrtrttimerdelete(rttimerttimer);
  调用这个函数接口后,系统会把这个定时器从rttimerlist链表中删除,然后释放相应的定时器控制块占有的内存。
  静态创建的定时器,可以用下边的函数脱离定时器:rterrtrttimerdetach(rttimerttimer);
  脱离定时器时,系统会把定时器对象从内核对象容器中脱离,但是定时器对象所占有的内存不会被释放。
  2。控制定时器
  RTThread也额外提供了定时器控制函数接口,以获取或设置更多定时器的信息。控制定时器函数接口如下:rterrtrttimercontrol(rttimerttimer,rtuint8tcmd,voidarg);
  控制定时器函数接口可根据命令类型参数,来查看或改变定时器的设置。
  参数cmd为用于控制定时器的命令,当前支持四个命令:设置定时时间、查看定时时间、设置单次触发、设置周期触发。defineRTTIMERCTRLSETTIME0x0设置定时器超时时间defineRTTIMERCTRLGETTIME0x1获得定时器超时时间defineRTTIMERCTRLSETONESHOT0x2设置定时器为单次定时器defineRTTIMERCTRLSETPERIODIC0x3设置定时器为周期型定时器
  arg为控制命令的参数。
  OK,今天先到这,下次继续。加油

山东好景济南深山里的泉水村庄秋日访泉,来到济南彩石街道玉河泉村。玉河泉、龙泉、院内泉、晴天泉、东老泉,环绕村庄,宛如江南水乡。再沿山路东行不远至万良峪村,这里的龙脉泉泉水正旺,像个小趵突水花涌动。当地村民……赛季皮肤补领攻略奉上,体验服四位英雄调整,猪八戒迎来首次增强原创兔八哥聊游戏王者荣耀S28赛季已经接近尾声,基本上在月底就会进行更新。而在赛季更新之前,很多玩家关心的还是一些免费皮肤的领取,而最近有小伙伴发现,之前没有领到赛季皮肤……宁波奉化有一座千年古镇,古建筑群保存完好,景色不输江南名镇在浙江省宁波市奉化区有一座千年古镇,地处四明山麓,奉化区三大江流之一的剡江由古镇旁缓缓流过,这里就是溪口镇,一座可追溯至宋景德三年(1006)年的镇子,如今的这里也已是著名的5……人生都会遇到难以选择人生没有什么不可以放下。人生就是不断的送别,所有的相遇最后都是离别,只是离别的方式不同罢了,有的时候你以为的错过是遗憾,其实有可能是逃过了一场劫难,得到未必是福,失去未必是祸,……有法令纹怎么办?当做了一个鼻基底填充后,改变效果令人震惊随着时间的流逝,我们的面部会渐渐出现松垂、法令纹加剧等情况,即使再高档的化妆品也无法阻挡这自然现象。最近,老路在回复大家私信时发现,越来越多的人存在纠结心理,比如同等价位为何不……别只盯着iPhone14和Mate50了,小米十三香下月登场iPhone14系列和华为Mate50系列正在热卖中,面对这两大年度旗舰,其他手机厂商是一个能打的都没有。但到了下个月,情况就会发生变化,因为将会有搭载骁龙8Gen2芯片的新机……湖人接连传利好,耐克一口气签下5人,詹皇一成就成历史首人近日湖人接连传来喜事,首先是在浓眉哥在比赛中展现了恐怖的统治力,并且连中了三分球,在上赛季,浓眉哥因为手部伤势,三分命中率不足两成,这也成为湖人无缘季后赛的一重要因素,而本赛季……内存SSD打价格战三星旗舰级1TB只要899元对于存储巨头们来说,都纷纷进行了业绩预警,行业的寒冬来了,所以内存、SSD降价的序幕才刚刚拉开。今年以来NAND闪存价格持续下滑,作为闪存一哥的三星也撑不住了,SSD价格……10月14日开启周年庆活动,活动皮肤归属曝光?专精刘邦喜提加本文原创首发于公众号:电竞怪客hello大家好我是怪客君就在昨天下午,王者荣耀官方进行了国庆结束后的第一次正式服版本更新,本次更新主要内容还是正式服的一些英雄调整。……中气一陷,百病皆现!一个百年古方,救活你的脾大家好,我是沈医生。我们有一种说法,就是脾气虚了,人就废了一半,但是你知道吗,除了脾气虚,还有一种更严重的情况,可能没有引起我们的注意,那就是脾气虚弱,中气下陷,比单纯的脾气虚……许多孩子都在整齐划一的学校和隐秘多样的家庭之间艰难穿行我们总会格外强调孩子在家庭和在学校的学习情况,而未曾留意到孩子在这两个完全不同的地方所经历的身份转换问题。事实上,当一个孩子习惯了家庭为他营造的一切,进入学校后的他将面临……2022F1意大利蒙扎大奖赛维斯塔潘5连胜,离总冠军更近一步蒙扎赛道:全长5。793公里,11个弯,时速达250公里以上,全年最高速的赛道之一。赛前预测红黄黄红一停,晚进站策略,丑潘排位赛调高了下压力,正赛看好丑潘夺冠。正赛:暖胎……
王二妮23岁成名,嫁给农村初恋,婆婆对我如亲生女儿2007年,一个来自陕西农村的姑娘,穿着妈妈亲手给她缝制的连衣裙,登上了《星光大道》的舞台。谁也没有想到,这个看上去娇小的姑娘,竟能爆发出如此强大的力量。从寂寂无名的农民草根,……70!哈萨克斯坦2022年前八月石油出口收入大幅增长据LS网站统计数据,哈萨克斯坦今年前八月石油出口收入比2021年同期增加了70。2022年18月,哈萨克斯坦出口原油和油品超过4620万吨,比2021年同期增长4。交易金……中国男篮历史代表人物,传奇中锋巴特尔,单臂撂倒奥尼尔的男人相信了解CBA的小伙伴都知道,在CBA的发展史上,有着这么一位传奇人物。他是内蒙古人,从CBA一路打到NBA,并且在NBA期间夺得总冠军戒指,成为首个夺得NBA总冠军的中国球员……如何用新型产业助力乡村振兴扩大民宿民居规模化瓴可泡泡屋中国优质的建筑材料和低层装配式建筑多场景一体化解决方案提供商。农村要全面发展,乡村要振兴,土地资源是重要载体,巩固好基本经营制度,围绕农村土地资源做好文章,是乡……ICP刻蚀氮化镓基LED结构的研究摘要氮化镓作为一种宽带隙半导体,已被用于制造发光二极管和激光二极管等光电器件。最近已经开发了几种用于氮化镓基材料的不同干蚀刻技术。电感耦合等离子体刻蚀因其优越的等离子体均……零跑C11,高端智能纯电SUV,喜欢有你的每一天随着新能源车消费者的购车需求升级,以及新能源车的技术进步,更多自主高端纯电SUV车型涌入市场,为消费者提供了更多续航出色且品质豪华的选择,因此,对于纯电SUV车型的消费者而言,……(蜀)花椒与经方治疗虚寒证的大建中汤介绍吴文博河北省石家庄市中医院花椒花椒为芸香科花椒属植物青椒或花椒的干燥成熟果皮。具有温中止痛,杀虫止痒的功效。主治中寒腹痛,寒湿吐泻,虫积腹痛,湿疹瘙痒,妇人阴痒等。……华为隐藏大招!全新麒麟5G芯片出现,两款两千档廉价新机齐发虽然遭到了史无前例的打压导致华为不保昔日的国产手机一哥地位,但很明显华为并不想在今年碌碌无为,还是希望能够继续维持运转,坚持到拨开云雾见青天的那一天。这段时间国产厂商纷纷发布新……北京这7个经典的老牌旅游景区,你最喜欢哪个呢?时间过得可真快,一转眼,就要过年了。新的一年,新的开始,新年里你想好去哪里玩了吗?北京春节值得一去的7个景区1、天安门天安门是国人游玩北京必去打卡点之一,它是……15分23分8记三分,逐渐适应!苦苦等待三年,你带着光芒回来当太阳悄无声息的八连胜之后,他们早已经和勇士拉开了差距,或许大部分人认为是太阳自身的稳定,在艾顿、克劳德等角色球员缺席的情况,总有像史密斯、比永博这种即将淡出联盟的球员重新给到……2009年韩国女星自缢,留遗书列下一份名单,后文在寅将家人送2011年3月7日,是韩国女星张紫妍去世两周年的忌日,她被称为韩国最凄惨的女明星。两年前的这一天,张紫妍被发现在家中自缢身亡,由于明星自杀在日韩娱乐圈中并不鲜见,因此她的……除了阿姆斯特朗,他也在月球留下脚印文刘宇轩1969年7月20日,由尼尔阿姆斯特朗担任指令长的阿波罗11号飞船登月舱成功于月球表面着陆,阿姆斯特朗成为踏足月球的第一人。他所说的名言对一个人来说,这是一……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网