- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
freertos时间管理
FreeRTOS时间管理分析转载请注明出处:/bluehacker时间管理包括两个方面:系统节拍的维护,产生;以及任务延时管理。下面分别讨论下。!--[if !supportLists]--一.? ?? ?? ?? ? !--[endif]--时钟节拍操作系统总是需要个时钟节拍的,这个需要硬件支持。freertos同样需要一个time tick产生器,通常是用处理器的硬件定时器来实现这个功能。它周期性的产生定时中断,所谓的时钟节拍管理的核心就是这个定时中断的服务程序。freertos的时钟节拍isr中除去保存现场,灰度现场这些事情外,核心的工作就是调用vTaskIncrementTick()函数。比如freescale的MCF5235系列coldfire处理器的移植代码中,对应的时钟节拍isr如下:static voidprvPortPreemptiveTick( void ){? ? asm volatile ( move.w??#0x2700, %sr\n\t );#if _GCC_USES_FP == 1? ? asm volatile ( unlk %fp\n\t );#endif? ? portSAVE_CONTEXT(??);? ? MCF_PIT_PCSR0 |= MCF_PIT_PCSR_PIF;? ? vTaskIncrementTick(??);←-------这里调用? ? vTaskSwitchContext(??);? ? portRESTORE_CONTEXT(??);}vTaskIncrementTick()函数主要做两件事情:维护系统时间(以tick为单位,多少个节拍);处理那些延时的任务,如果延时到期,则唤醒任务。inline void vTaskIncrementTick( void ){? ?? ? /*检查调度器是否被禁止,如果没有被禁止. */? ?? ? if( uxSchedulerSuspended == ( unsigned portBASE_TYPE ) pdFALSE )? ?? ?? ???{/*xTickCount是一个系统全局变量,它维护系统当前时间(从启动到现在过去了多少个节拍),这里把这个变量加一*/? ?? ?? ?? ???++xTickCount;//如果加完后等于0,则说明溢出了? ?? ?? ?? ???if( xTickCount == ( portTickType ) 0 )? ?? ?? ?? ???{? ?? ?? ?? ?? ?? ?? ?xList *pxTemp;? ?? ?? ?? ?? ?? ?? ?/* 因为xTickCount溢出,所以我们需要交换任务延时链表,系统定义了两个链表指针pxDelayedTaskList和pxOverflowDelayedTaskList,其中pxDelayedTaskList始终指向当前正在使用的那个任务延时链表,而pxOverflowDelayedTaskList指向的则总是备用的那个任务链表*在这里我们让pxDelayedTaskList指向原先由pxOverflowDelayedTaskList指向的那个链表,做个交换*/? ?? ?? ?? ?? ?? ?? ?pxTemp = pxDelayedTaskList;? ?? ?? ?? ?? ?? ?? ?pxDelayedTaskList = pxOverflowDelayedTaskList;? ?? ?? ?? ?? ?? ?? ?pxOverflowDelayedTaskList = pxTemp;? ?? ?? ?? ?xNumOfOverflows++;? ?? ?? ?? ???}? ?? ?? ?? ???/* 检查有没有任务的延时已经到期,如果有,则唤醒 */? ?? ?? ?? ???prvCheckDelayedTasks();? ?? ? }? ?? ? else? ?? ? {//如果调度器被禁止,则我们把丢失的时钟节拍记录在全局变量uxMissedTicks中? ?? ?? ?? ???++uxMissedTicks;? ?? ?? ?? ???/* 调用用户定义的tick hook,即使调度器被禁止也要调用. */? ?? ?? ?? ???#if ( configUSE_TICK_HOOK == 1 )? ?? ?? ?? ???{? ?? ?? ?? ?? ?? ?? ?extern void vApplicationTickHook( void );? ?? ?? ?? ?? ?? ?? ?vApplicationT
您可能关注的文档
- 400大型设备吊装方案.doc
- 4中国注册会计师职业道德守则第4号—审计和审阅业务对独立性的要求.doc
- 4WINCC课程--动态连接.doc
- 425全国儿童预防接种宣传日 宣传资料.doc
- 4何谓度量问题.doc
- 4商业银行金融服务外包的决策模型与战略选择.doc
- 4月11日避难硐室掘进作业规程.doc
- 4架空线路及杆上电气设备安装.doc
- 4北京海淀区二模(化学部分).doc
- 4中油工程字2006408【井控判废规定】.doc
- 功能设计_MM_MM015_报废单_20080109_v2.0.doc
- 功能设计_MM_MM021_采购订单批导入程序_20080108_v1.0.doc
- 功能设计_MM_MM020_出库单_20071205_v2.1.doc
- 功能设计_MM_MM019_入库单_20071205_v2.1.doc
- 功能设计_MM_MM018_领料单_20080114_v2.0.doc
- 功能设计_MM_MM016_ERP与招投标系统接口_20080327_v1.2.doc
- 功能设计_MM_MM014_退库单_20080109_v1.0.doc
- 功能设计_MM_MM013_物料盘点清单_20080114_v2.0.doc
- 中考数学知识点10 一元一次不等式(组)(2).pdf
- 七年级数学优质课公开课教案教学设计期中综合检测.pdf
文档评论(0)